2008-11-28 50 views
4

在苹果的NSObject的文档,NSZoneFree是所谓的 - (空)dealloc的示例代码:NSZoneFree在 - (void)dealloc中处理了什么?

- (void)dealloc { 
    [companion release]; 
    NSZoneFree(private, [self zone]) 
    [super dealloc]; 
} 

您可以在上下文over here找到它。

我从来没有这样的想法,我应该在我自己的NSObject子类(或什么NS_WhateverClass_子类)中调用NSZoneFree,并且无法在文档中的任何位置找到任何确凿的主题。

关于使用NSZoneFree的所有信息,请参见Memory Management Programming Guide以及Foundation Functions Reference中函数的解释,但这些文档都没有告诉我是否应该在dealloc方法。

任何人都可以澄清我什么时候应该将NSZoneFree调用放在我自己的类的dealloc实现中吗?

编辑:感谢您的答复,这是更清楚我现在:) - 德克

回答

2

NSZoneFree()余额出来NSZoneMalloc()通话,就像-release平衡调用-alloc-copyCFRelease()平衡调用CFRetain()CF*Create*()或者,对于这个问题,free()余额malloc()calloc()通话。

鉴于C库在Mac OS X上使用的分配器,这很大程度上是学术性的,但最佳实践表明,您以与获得内存相同的方式释放对内存的保留,并且在那种情况下类,实例变量private以前已分配为NSZoneMalloc()

1

按照Foundation Reference

返回内存从它被分配的区域。标准C函数free可以做同样的事情,但花费时间查找内存属于哪个区域。

因此,在清理malloc'd和calloc'd内存时,基本上使用NSZoneFree()而不是free()。但是,您通常不需要调用它。

相关问题