Objective c NSMutableArray对象在方法中不可访问
我的.h文件中有以下变量:Objective c NSMutableArray对象在方法中不可访问,objective-c,object,nsmutablearray,Objective C,Object,Nsmutablearray,我的.h文件中有以下变量: NSMutableArray *arr; 然后我有了一个实现中的方法: void aMethod { if (something) { arr= [[NSMutableArray alloc] init]; arr = [NSMutableArray arrayWithCapacity:0]; [arr addObject:someObject]; } 现在,如果我尝试从任何其他方法或同一方法中的另
NSMutableArray *arr;
然后我有了一个实现中的方法:
void aMethod
{
if (something)
{
arr= [[NSMutableArray alloc] init];
arr = [NSMutableArray arrayWithCapacity:0];
[arr addObject:someObject];
}
现在,如果我尝试从任何其他方法或同一方法中的另一个if块访问arr,则应用程序崩溃,我无法访问该arr。例如:
//same method:
if (something else)
{
SomeObject *obj = [arr objectAtIndex:0]; //<---- it crashes on this line
}
//相同的方法:
如果(其他事情)
{
SomeObject*obj=[arr objectAtIndex:0];//这里有两个错误:
你漏了
arr=[[NSMutableArray alloc]init];//这里有两个错误:
你漏了
arr=[[NSMutableArray alloc]init];//您将构造两次数组。以下两行:
arr= [[NSMutableArray alloc] init];
arr = [NSMutableArray arrayWithCapacity:0];
第一个方法构造一个空数组,第二个方法丢弃第一行的结果,并构造另一个自动删除的空数组,即除非显式保留,否则不会超出当前方法
擦拭阵列的容量
行,它将按预期工作。不要忘记在解除锁定
中释放,您将构建两次阵列。以下两行:
arr= [[NSMutableArray alloc] init];
arr = [NSMutableArray arrayWithCapacity:0];
第一个方法构造一个空数组,第二个方法丢弃第一行的结果,并构造另一个自动删除的空数组,即除非显式保留,否则不会超出当前方法
擦除阵列的容量
行,它将按预期工作。不要忘记在dealloc
中释放该阵列的第二个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];
}
}
数组的第二个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];
}
}
或者,如果您想要一个自动释放的
数组,请删除init
行,并保留容量为
的数组。您好,谢谢。现在我不会在那一点上崩溃。但是当我访问刚从数组中检索到的对象时。我在调试器中得到以下信息:程序接收信号:“EXC\u BAD\u access”。它可能与NSMutableArray相关吗?这意味着其他地方还有另一个bug。您可能过度释放了添加到数组中的对象。您能给我一个例子说明如何过度释放对象吗?这就是我填充该数组的方式:或者,如果您想要一个自动删除的数组,请删除init
行,并保持阵列的容量
。嗨,谢谢。现在我没有在那一点上得到崩溃。但是当我访问我刚从阵列中检索到的对象时。我在调试器中得到以下信息:程序收到信号:“EXC\u BAD\u access”。是否可能与NSMutableArray相关?这意味着其他地方存在另一个bug。您可能过度释放了添加到数组中的对象。您能给我一个如何过度释放对象的示例吗?这是我填充该数组的方式: