Cocoa Objective-C/C数组值
我有多个数组,但是,它们不保留数据以用于其他方法 下面是我如何设置它(简化)Cocoa Objective-C/C数组值,cocoa,nsarray,ghosts-in-the-machine,Cocoa,Nsarray,Ghosts In The Machine,我有多个数组,但是,它们不保留数据以用于其他方法 下面是我如何设置它(简化) .h NSArray *array; @property (nonatomic, copy) NSArray *array; -(void)someMethod:(NSArray*)someArray; -(void)heresNewMethod; .m -(void)someMethod:(NSArray*)someArray { array = [someArray copy]; } -(void)heres
.h
NSArray *array;
@property (nonatomic, copy) NSArray *array;
-(void)someMethod:(NSArray*)someArray;
-(void)heresNewMethod;
.m
-(void)someMethod:(NSArray*)someArray
{
array = [someArray copy];
}
-(void)heresNewMethod //gets called by method not shown
{
NSLog(@"%@", array);
}
除了每次调用
someMethod:
时都会泄漏数组中的内容之外,该代码应该可以工作。您看到的问题是什么?除了每次调用someMethod:
时都会泄漏数组中的内容之外,该代码应该可以工作。您看到了什么问题?发生了两件事之一:
- 您向对象发送了一条
someMethod:
消息,传递nil
(可能没有意义)。发送到nil
的消息返回nil
,因此您将nil
-作为copy
消息的结果分配给array
实例变量。即使您之前在那里隐藏了一个指向数组的指针,在您对该someMethod:
消息的响应中,您也将其替换为nil
- 您从未向对象发送过
someMethod:
消息。由于实例变量被初始化为nil
,并且您从未在数组
实例变量中放入任何不同的内容,因此它仍然包含nil
在代码中添加更多NSLog语句来测试第一个理论。真理不是一个就是另一个,因此确认第一个理论就否定了第二个理论,反之亦然。发生了两件事中的一件:
- 您向对象发送了一条
someMethod:
消息,传递nil
(可能没有意义)。发送到nil
的消息返回nil
,因此您将nil
-作为copy
消息的结果分配给array
实例变量。即使您之前在那里隐藏了一个指向数组的指针,在您对该someMethod:
消息的响应中,您也将其替换为nil
- 您从未向对象发送过
someMethod:
消息。由于实例变量被初始化为nil
,并且您从未在数组
实例变量中放入任何不同的内容,因此它仍然包含nil
在代码中添加更多NSLog语句来测试第一个理论。真理不是一个就是另一个,因此确认第一个理论就否定了第二个理论,反之亦然。唯一的答案是,您提供的代码不是您使用的代码,差异是至关重要的。我的意思是,您声明了一个不使用的属性,并且不清楚您是否正确定义了访问器,或者数组是否也是一个本地数组,它是否隐藏了您的属性,或者是什么
请发布您的真实代码。唯一的答案是,您提供的代码不是您使用的代码,差异是至关重要的。我的意思是,您声明了一个不使用的属性,并且不清楚您是否正确定义了访问器,或者数组是否也是一个本地数组,它是否隐藏了您的属性,或者是什么
请发布您的真实代码。您面临的实际问题是什么?顺便说一句,您应该在存储someArray的副本之前调用[array release],以避免泄漏前一个数组的内存。您面临的实际问题是什么?顺便说一句,您应该调用[array release]在存储someArray副本之前,为了避免泄漏上一个数组的内存。@马特:在复制前,您是否检查了someArray
是否为null
或nil
?马特:您是否检查了someArray
在复制前是否为null
或nil
,结果是零。好吧,该死的,结果是零。没关系,多亏了彼得·霍西大帝,我才解决了这个问题。没关系,多亏了彼得·霍西大帝,我才解决了这个问题