在一个简单的UIImageViews数组上的EXC_BAD_ACCESS

时间:2011-02-02 20:23:27

标签: iphone arrays memory uiimageview

此代码有什么问题?

在界面中:

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。它将保留在界面中。有什么问题?

3 个答案:

答案 0 :(得分:5)

不要发布array。使用arrayWithObjects:,它将返回一个自动释放的对象。从某种意义上说,你发布它两次。另一种选择是:

[[NSArray alloc]initWithObjects:...]

然后你可以发布array

请参阅Apple的内存管理文章:

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmObjectOwnership.html%23//apple_ref/doc/uid/20000043-BEHDEDDB

答案 1 :(得分:2)

arrayWithObjects是一个方便的方法并返回一个自动释放的对象,所以删除

[array release];

另外,你这样做会泄漏内存:

[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"image1.png"]]

因为这次没有发布imageView。

答案 2 :(得分:1)