UIImage *image = [UIImage imageNamed:@"hoge.png"];
連番のファイル名からUIImageを作る。
NSString *str;
UIImage *img;
for(int i = 0; i <= 10; i++) {
str = [NSString stringWithFormat:@"00%d.png", i];
str = [str substringWithRange:NSMakeRange([str length] - 7, 7)];
img = [UIImage imageNamed:str];
}
UIImage *img;
for(int i = 0; i <= 10; i++) {
str = [NSString stringWithFormat:@"00%d.png", i];
str = [str substringWithRange:NSMakeRange([str length] - 7, 7)];
img = [UIImage imageNamed:str];
}
上記のimageNamedによる作成の場合、release後に同じ画像ファイルをUIImageViewの
UIImageにセットしようとするとプログラムが強制終了してしまう。
そういう場合は以下のようにallocを使うと強制終了しなくなる。
NSString *imagePath;
UIImage *img;
imagePath = [[NSBundle mainBundle] pathForResource:@"hoge" ofType:@"png"];
img = [[UIImage alloc] initWithContentsOfFile:imagePath];
UIImage *img;
imagePath = [[NSBundle mainBundle] pathForResource:@"hoge" ofType:@"png"];
img = [[UIImage alloc] initWithContentsOfFile:imagePath];
imageNamedで作成した場合、勝手にキャッシュを作ってしまうためreleaseしても残ってしまい、同じ画像を使おうとするとリークが発生してしまうのではないかと思います。
あくまで推測ですので、詳しい事を知っている方が居ましたらコメントをいただけると嬉しいです。
【iPhoneプログラミングの最新記事】