如果您必須存儲空的佔位符對象,請使用[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
。
謝謝,但重點是這個。我不存儲零。當數組被創建時,對象不是零,但是在那之後,它變成了零。所以,讀取數組將導致崩潰。所以你是什麼意思?你能詳細說明嗎? – SpaceDog 2010-04-07 16:31:03
在這種情況下,你有一個錯誤。數組中的對象由數組保留。在正常情況下,您提到的崩潰不應該發生,因爲在數組釋放對象之前,對象不會被釋放。在你的情況下,在你的代碼中有一個失蹤的保留,或者你至少釋放一次。這導致可變數組中的對象被釋放,而數組仍然引用該對象。 – Giao 2010-04-07 16:33:56
@Mike編輯答案。 – 2010-04-07 16:36:35