2006年03月30日(木)の日記
雪が降りCoreFoundationを知る。
雪
あー、もうすぐ4月かー。そう思って窓を開けたときに目にした光景。
雪が積もっtrklrじぇあdsfj;kjふじこ
…思わず取り乱す。
雪が降ってるどころか積もってる。
春だよ?
もう桜とか咲いちゃう時期だよ?
たぶん明日あたり恐怖の大王とかまで降ってきちゃうんぢゃないかなー。
花の咲いた梅に積もる雪を見て僕はそう確信したのでした。
CoreFoundation
NSMutableArrayにオブジェクトではない変数のポインタを格納するには?たとえば、
#import <Cocoa/Cocoa.h> int main() { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; NSMutableArray *mutableArray = [NSMutableArray array]; int cArray[5][3] = { { 0, 1, 2}, { 3, 4, 5}, { 6, 7, 8}, { 9, 10, 11}, {12, 13, 14} }; int ii; for (ii = 0;ii < 5;ii++) { [mutableArray addObject:(id)cArray[ii]]; } for (ii = 0;ii < 5;ii++) { int *cArrayInLoop = (int *)[mutableArray objectAtIndex:ii]; printf("%d, %d, %d\n", cArrayInLoop[0], cArrayInLoop[1], cArrayInLoop[2]); } [pool release]; return 0; }というコードはコンパイルは通るものの実行できない……と思って今やってみたら実行できてしまいました。
あれ?
実行できるんだ。
実行できないと思って CoreFoundation を使ってしまったよ。
まぁ、
NSMutableArray *mutableArray = [NSMutableArray array];↓
NSMutableArray *mutableArray = [(NSMutableArray *)CFArrayCreateMutable(kCFAllocatorDefault, 0, NULL) autorelease];というだけなんですが。
登録するオブジェクト(ポインタ)にメッセージを送らないようにコールバックをNULLにして成功したんで、これでいいかと思ったら、こうぢゃなくても良かったという…。
EXEC_BAD_ACCESSエラーが出た気がしたんだけどなー。
悩んでた時間はなんだったんだ。
この日記へのトラックバック
NSMutableArrayに色んなものを入れてみる。トイレットペーパーに字を書く筆圧で NSMutableArrayというと、Objective-Cのオブジェクトを順番に保持しておくクラスですが、実際に保持して...
この日記へのコメント