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
,结果是零。好吧,该死的,结果是零。没关系,多亏了彼得·霍西大帝,我才解决了这个问题。没关系,多亏了彼得·霍西大帝,我才解决了这个问题