在Apple的NSObject文档中,NSZoneFree在 - (void)dealloc示例代码中调用:
- (void)dealloc {
[companion release];
NSZoneFree(private, [self zone])
[super dealloc];
}
您可以在上下文over here中找到它。
我从来没有想过我应该在我自己的NSObject子类(或NS_WhateverClass_子类)中调用NSZoneFree,并且无法在文档的任何位置找到关于该主题的任何结论。
我可以在Memory Management Programming Guide中简要提及使用NSZoneFree的所有内容,以及Foundation Functions Reference中对该功能的解释,但这些文档都没有告诉我是否应该担心在dealloc方法的背景下关于它。
任何人都可以澄清我何时应该在我自己的类的dealloc实现中调用NSZoneFree?
编辑:感谢您的回复,现在对我来说更清楚了:) - 德克
答案 0 :(得分:2)
NSZoneFree()
平衡了对NSZoneMalloc()
的通话,就像-release
平衡拨打-alloc
或-copy
和CFRelease()
来平衡通话一样至CFRetain()
或CF*Create*()
,或者free()
平衡对malloc()
或calloc()
的调用。
考虑到C库在Mac OS X上使用的分配器,其中大部分都是学术性的,但是最佳实践表明你以与获得它相同的方式释放内存,并且在该类的情况下,实例变量private
之前已经分配了NSZoneMalloc()
。
答案 1 :(得分:1)
将内存返回到分配它的区域。标准C函数free也是如此,但花时间查找内存所属的区域。
因此,在清理malloc'd和calloc'd内存时,你基本上使用NSZoneFree()而不是free()。但是,您通常不需要调用它。