【问题标题】:Obj-c IOS Memory Managementobj -c IOS内存管理
【发布时间】:2011-03-19 21:17:51
【问题描述】:

问题 #1:作为一项规则,如果我不需要,我从不释放对象。假设 stringWithUTF8String 本身有一个 autorelease,我不必执行“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(nonatomic, retain) 变量,dealloc'ing 的最佳做法是什么,是“self.foo = nil;”吗?或“[foo release](我现在在做什么)”。此外,我不想搞乱 KVO 问题,不管它们是什么......

【问题讨论】:

    标签: iphone objective-c ios


    【解决方案1】:

    A1) 对。你的 sn-p 是正确的。

    A2)如果你 malloc'ed 它然后调用 free(毕竟它是一个 C)。无需做foo = nil - 从dealloc 返回时,您的对象将死亡,没有人关心这个指针值是什么了。

    A3) [foo release]; .

    【讨论】:

    • 所有正确答案,但有很多人争论答案编号 3 的唯一正确性。就我自己而言,我认为通过始终使用 self.foo = nil 在所有可写(保留/ assign) 指针属性,您可以相当确定没有内存管理规则被破坏。我听说了,虽然不能证实现在连苹果人都这样做了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-06
    • 2010-09-27
    • 1970-01-01
    • 1970-01-01
    • 2015-12-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多