此代码有什么问题?
在界面中:
NSArray *myImages;
@property (nonatomic, retain) NSArray *myImages;
实现:
NSArray *array = [NSArray arrayWithObjects:
[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"image1.png"]],
[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"image2.png"]],
[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"image3.png"]],
nil];
self.myImages = array;
[array release];
如果我在初始化之后立即记录myImages,它会正确记录UIImageViews数组。但是,稍后在应用程序中,当我尝试从不同的方法访问self.myImages时,我得到EXC_BAD_ACCESS。它将保留在界面中。有什么问题?
答案 0 :(得分:5)
不要发布array
。使用arrayWithObjects:
,它将返回一个自动释放的对象。从某种意义上说,你发布它两次。另一种选择是:
[[NSArray alloc]initWithObjects:...]
然后你可以发布array
。
请参阅Apple的内存管理文章:
答案 1 :(得分:2)
arrayWithObjects是一个方便的方法并返回一个自动释放的对象,所以删除
[array release];
另外,你这样做会泄漏内存:
[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"image1.png"]]
因为这次没有发布imageView。
答案 2 :(得分:1)
arrayWithObjects返回一个自动释放的对象,你过度释放它。见http://developer.apple.com/library/mac/#documentation/cocoa/conceptual/MemoryMgmt/Articles/mmRules.html%23//apple_ref/doc/uid/20000994-BAJHFBGH