2011-03-19 76 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