对象IOS内存管理

时间:2011-03-19 21:17:52

标签: iphone objective-c ios

问题#1 :作为一项规则,如果我不需要,我永远不会释放对象。假设stringWithUTF8String本身有自动释放,我不必做“return [... autorelease]”,对吗?

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

}

问题#2 :在我的班级中我有属性:“const uint8_t * bytes;”。在dealloc方法中,我必须调用“bytes = nil;”或者“free(bytes);”,或者什么都没有?

问题#3 :对于我的课程中的@property(非原子,保留)变量,dealloc'ing的最佳实践是什么,是“self.foo = nil;”或“ [foo releease](我现在在做什么)”。另外,我不想搞乱KVO问题,无论它们是什么......

1 个答案:

答案 0 :(得分:1)

A1)对。你的代码片段是正确的。

A2)如果你malloc编辑了它,那么请拨打free(毕竟它是一个C)。无需执行foo = nil - 从dealloc返回时,您的对象将会死亡,没有人关心此指针值是什么。

A3)[foo release];