2010-06-18 67 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