2010-04-07 35 views
3

我有一個可變的數組,保留並存儲幾個對象。在某個時候,一個對象可能會變成零。發生這種情況時,應用程序將崩潰,因爲數組不能有零對象。想象一下像iphone - mutablearray不能存儲零對象

[object1,object2,object3,nil];

然後,Object2的=零

[object1,零,object3,零]。

這是不可能的,因爲nil是數組標記的結尾。那麼,我該如何解決這個問題呢?謝謝你的幫助。

回答

9

如果您必須存儲空的佔位符對象,請使用[NSNull null]

例如:

NSArray * myArray = [NSArray arrayWithObjects:obj1, [NSNull null], obj3, nil]; 

myArray將包含3個對象。當您檢索對象,你可以做一個簡單的指針平等的測試,看看它的空單:

id object = [myArray objectAtIndex:anIndex]; 
if (object == [NSNull null]) { 
    //it's the null object 
} else { 
    //it's a normal object 
} 

編輯(迴應評論)

@Mike我認爲你得到與實際發生的事情混淆。

如果您有:

id obj = ...; 

然後obj包含地址。它不包含對象。因此,如果你做NSLog(@"%p", obj),它會打印一些像0x1234567890。當您將obj放入數組中時,它不會複製該對象,而是複製對象的地址。所以陣列實際上包含0x1234567890。因此,當您稍後執行:obj = nil;時,您只會影響陣列外部的指針。該陣列仍將包含0x1234567890

+0

謝謝,但重點是這個。我不存儲零。當數組被創建時,對象不是零,但是在那之後,它變成了零。所以,讀取數組將導致崩潰。所以你是什麼意思?你能詳細說明嗎? – SpaceDog 2010-04-07 16:31:03

+2

在這種情況下,你有一個錯誤。數組中的對象由數組保留。在正常情況下,您提到的崩潰不應該發生,因爲在數組釋放對象之前,對象不會被釋放。在你的情況下,在你的代碼中有一個失蹤的保留,或者你至少釋放一次。這導致可變數組中的對象被釋放,而數組仍然引用該對象。 – Giao 2010-04-07 16:33:56

+0

@Mike編輯答案。 – 2010-04-07 16:36:35