obj -c IOS内存管理

Posted

技术标签:

【中文标题】obj -c IOS内存管理【英文标题】:Obj-c IOS Memory Management 【发布时间】: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 问题,不管它们是什么......

【问题讨论】:

【参考方案1】:

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

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

A3) [foo release]; .

【讨论】:

所有正确答案,但有很多人争论答案编号 3 的唯一正确性。就我自己而言,我认为通过始终使用 self.foo = nil 在所有可写(保留/ assign) 指针属性,您可以相当确定没有内存管理规则被破坏。我听说了,虽然不能证实现在连苹果人都这样做了。

以上是关于obj -c IOS内存管理的主要内容,如果未能解决你的问题,请参考以下文章

iOS 内存管理

iOS内存管理

IOS内存管理机制

iOS OC08,09_内存管理

iOS之内存管理(ARC)

iOS开发-内存管理