我的.h文件中有以下变量:
NSMutableArray *arr;
然后我有一个实现方法:
void aMethod
{
if (something)
{
arr= [[NSMutableArray alloc] init];
arr = [NSMutableArray arrayWithCapacity:0];
[arr addObject:someObject];
}
现在,如果我尝试从任何其他方法访问arr,或者甚至在同一方法中使用块,则应用程序崩溃,我无法访问该arr。例如:
//same method:
if (something else)
{
SomeObject *obj = [arr objectAtIndex:0]; //<---- it crashes on this line
}
有光明人吗? 提前致谢
答案 0 :(得分:2)
这里有2个错误:
您有泄漏
arr = [[NSMutableArray alloc] init]; //&LT; - 在这里
崩溃导致您正在创建自动释放的对象,然后在已经解除分配时尝试访问它:
arr = [NSMutableArray arrayWithCapacity:0];
删除此行:
arr = [NSMutableArray arrayWithCapacity:0];
答案 1 :(得分:2)
你正在构建两次数组。以下两行:
arr= [[NSMutableArray alloc] init];
arr = [NSMutableArray arrayWithCapacity:0];
第一个构造一个空数组。第二行抛弃第一行的结果,并构造另一个自动释放的空数组 - 也就是说,除非明确保留,否则不会超出当前方法。
擦除arrayWithCapacity
行,它会按预期工作。不要忘记在dealloc
中发布。
答案 2 :(得分:2)
数组的第二个init形成一个自动释放的实例。
这样做
-(id)init
{
self = [super init];
if(self)
{
arr = [[NSMutableArray arrayWithCapacity:5] retain];
}
return self;
}
-(void)dealloc
{
[arr release];
[super dealloc];
}
-(void)aMethod
{
if (something)
{
[arr addObject:someObject];
}
}