2011-03-19 78 views
0

問題#1:作爲一項規則,如果我不需要,我永遠不會釋放一個對象。假設stringWithUTF8String自己內部有autorelease,我不必做「return [... autorelease]」,對吧?Obj-c IOS內存管理

-(NSString*)nonNullDBString:(const unsigned char*)value { 
if(value == nil) { 
    return @""; 
} else { 
    return [NSString stringWithUTF8String:(char *)value]; 
} 

}

問題2:在我的課我有屬性: 「常量uint8_t *字節;」。在dealloc方法中,我必須調用「bytes = nil;」或「免費(字節);」,或根本沒有?

問題3:對於我的類中的@property(nonatomic,retain)變量,dealloc'ing的最佳實踐是什麼,它是「self.foo = nil;」或「[foo releease](我現在在做什麼)」。此外,我不想惹KVO問題,無論他們是...

回答

1

A1)對。您的摘錄是正確的。

A2)如果你malloc'編輯它,然後調用free(這是一個C畢竟)。不需要做foo = nil - 從dealloc返回時你的對象將會死亡,沒有人關心這個指針的值是什麼。

A3)[foo release];

+0

所有正確的答案,但有很多人爭論關於答案3的排他性的正確性。對於我自己,我堅持使用'self.foo = nil'在所有可寫(保留/賦值)指針屬性,你可以確信沒有內存管理規則被破壞。我聽說,雖然無法證實,即使是蘋果的人現在也這樣做。 – epologee 2011-03-19 22:48:41