Iphone 在UIImageView的简单数组上执行错误访问

Iphone 在UIImageView的简单数组上执行错误访问,iphone,arrays,memory,uiimageview,Iphone,Arrays,Memory,Uiimageview,这个代码有什么问题 在界面中: NSArray *myImages; @property (nonatomic, retain) NSArray *myImages; 实施: NSArray *array = [NSArray arrayWithObjects: [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"image1.png"]], [[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之后立即记录它,它将正确记录UIImageView数组。然而,在应用程序的后面,当我尝试从其他方法访问self.myImages时,我获得了EXC_BAD_访问权限。它将保留在界面中。有什么问题吗?

如果arrayWithObjects返回一个自动释放的对象,您就过度释放了它。请参见此处

arrayWithObjects返回自动释放的对象,您过度释放了它。请参见此处,请勿释放阵列。使用arrayWithObjects:,它将返回一个自动删除的对象。从某种意义上说,你是在释放它两次。另一种选择是:

[[NSArray alloc]initWithObjects:...]
然后可以释放数组

请参阅苹果的内存管理文章:

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

[[NSArray alloc]initWithObjects:...]
然后可以释放数组

请参阅苹果的内存管理文章:


arrayWithObjects是一种方便的方法,它返回一个自动释放的对象,因此请删除

[array release];
此外,您还可以通过以下操作泄漏内存:

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

因为这次不会释放imageView。

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

[array release];
此外,您还可以通过以下操作泄漏内存:

[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"image1.png"]]
因为这次没有发布imageView