Cocoa touch iPhone从NSArray获取UIImageView

Cocoa touch iPhone从NSArray获取UIImageView,cocoa-touch,Cocoa Touch,首先,非常感谢您点击进入我的问题 我有一些UIImageView和一个NSMutableArray at.h 上午10点 然后在其他函数中,当我写 UIImageView *tmp1; tmp1 = [aImg objectAtIndex:0]; 它说GDB:程序加载;还展示了一些狗屎 0x92a1d688 mov 0x20(%edx),%edi 有人能帮我吗?您想保留正在创建的阵列,否则将立即释放它 -(void)viewDidLoad{ [super viewDidLoad];

首先,非常感谢您点击进入我的问题

我有一些UIImageView和一个NSMutableArray

at.h

上午10点

然后在其他函数中,当我写

UIImageView *tmp1;
tmp1 = [aImg objectAtIndex:0];
它说GDB:程序加载;还展示了一些狗屎
0x92a1d688 mov 0x20(%edx),%edi


有人能帮我吗?

您想保留正在创建的阵列,否则将立即释放它

-(void)viewDidLoad{
    [super viewDidLoad];
    aImg = [[NSMutableArray arrayWithObjects: img1, img2, img3, nil] retain];
}

是EXC错误访问错误吗?我打赌是的。这是在尝试访问已从内存中删除或取消分配的对象时造成的

这一行:

aImg = [NSMutableArray arrayWithObjects: img1, img2, img3, nil];
返回设置为自动释放的数组对象。这意味着导致此操作的事件完成后,它将被释放。如果您没有明确保留它,它将被释放,保留计数将降至零,对象将被释放

随后,当您尝试使用该数组时,它实际上并不存在,程序崩溃。如果您改为这样做:

aImg = [[NSMutableArray alloc] initWithObjects: img1, img2, img3, nil];
然后您将直接初始化一个数组,而这个数组将不会自动删除。只需确保在保存此数组的类的-(void)dealloc方法中添加:

[aImg release];
请阅读此文档,然后再阅读一遍。这对于iPhone的开发非常重要。

使用方法的自动释放版本只是为了立即保留它,这有点愚蠢。[[NSMutableArray alloc]initWithObjects:img1、img2、img3、nil]将干净地执行此操作,而无需任何不必要的保留和释放。谢谢你的回答,我真的很讨厌愚蠢的objective-c。加上nil是没有意义的,加上这个更没有意义,我还没有经历过其他那么难看的语言。。。。。“组件通过字符串分离”而不是“拆分”?这是不同的,但你要学会欣赏它。坚持下去。XCode自动完成将使巨大的方法名没有什么大不了的。
aImg = [[NSMutableArray alloc] initWithObjects: img1, img2, img3, nil];
[aImg release];