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内存管理的主要内容,如果未能解决你的问题,请参考以下文章