的NSMutableArray对象的方法无法访问
问题描述:
我在我的.h文件中的以下变量:的NSMutableArray对象的方法无法访问
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
}
任何灯光家伙? 在此先感谢
答
有2个错误的位置:
-
你有一个泄漏
ARR = [[NSMutableArray里的alloc]初始化]。 // < --here
-
它崩溃,因为你正在创建自动释放的对象,然后尝试访问它时,它已经释放:
ARR = [NSMutableArray的arrayWithCapacity:0];
删除此行:
arr = [NSMutableArray arrayWithCapacity:0];
答
你构建阵列的两倍。以下两行:
arr= [[NSMutableArray alloc] init];
arr = [NSMutableArray arrayWithCapacity:0];
第一个构造一个空数组。第二个抛出第一行的结果,并构造另一个自动释放的空数组 - 也就是说,除非明确保留,否则不会超出当前方法。
擦拭arrayWithCapacity
一行,它会按预期工作。不要忘记在dealloc
发布。
答
该数组的第二个init形成一个自动释放的实例。
如果你想要一个`autoreleased`阵列,然后删除`init`线,并保持`arrayWithCapacity`做到这一点
-(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];
}
}
或者,。 – 2011-03-11 20:31:58
嗨,thanksNow我没有得到 – Steve 2011-03-11 20:33:38
嗨,谢谢。现在我在这一点上没有崩溃。但是当我访问刚刚从数组中检索到的对象时。我在调试器中看到以下内容:程序收到信号:“EXC_BAD_ACCESS”。它可以是NSMutableArray相关? – Steve 2011-03-11 20:35:52