2010-06-18 51 views
1

我有多个数组,但是他们没有保留他们的数据用于另一种方法。Objective-C /可可丢失数组值

以下是我有它设置(简体)

.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); 
} 
+2

你面临的实际问题是什么?顺便说一句,你应该在存储someArray的副本之前调用[数组发布],以避免泄漏前一个数组的内存。 – MKroehnert 2010-06-18 21:24:07

回答

7

其中之一发生了两两件事:

  • 您发送的对象someMethod:消息,传递nil(可能没有意义的)。发送到nil的消息返回nil,因此您将nil(作为copy消息的结果)分配给array实例变量。即使您之前已经隐藏了一个指向数组的指针,您在对此someMethod:消息的响应中将其替换为nil
  • 您从未发送过对象someMethod:消息。由于实例变量初始化为nil,并且您从不在array实例变量中添加任何不同内容,所以它仍包含nil

在代码中撒上更多的NSLog语句来测试第一个理论。事实是无论是哪一种,所以确认第一种理论反驳第二种理论,反之亦然。

+0

好都没有,它返回零。 – 2010-06-19 02:56:27

0

除了事实,你会泄漏无论是在你每次array请致电someMethod:,该代码应该工作。你看到什么问题?

+0

当我将它记入heresNewMethod – 2010-06-18 22:12:51

+0

@Matt时,数组显示为空:您在复制之前是否检查过'someArray'不是'null'或'nil'? – MKroehnert 2010-06-18 23:12:43

+0

是的。这不是,有数据 – 2010-06-19 01:58:10

0

唯一的答案是您提供的代码不是您使用的代码,其差别至关重要。我的意思是,你声明了一个你不用的财产,而且你是否正确地定义了你的访问器,或者数组是否是一个影响你的财产的地方,或者什么都不清楚。

请张贴您的真实密码。

+0

并不重要,我感谢伟大的Peter Hosey解决了这个问题 – 2010-06-19 03:17:28