首先,我使用的是ARC。
例如,如果我有一个类看起来像这样:
static CFNumberRef numberRef = NULL;
+ (void)initialize {
float myFloat = 28.37202;
numberRef = CFNumberCreate(kCFAllocatorDefault, CFNumberFloatType, &myFloat);
}
我将如何发布numberRef
?
首先,我使用的是ARC。
例如,如果我有一个类看起来像这样:
static CFNumberRef numberRef = NULL;
+ (void)initialize {
float myFloat = 28.37202;
numberRef = CFNumberCreate(kCFAllocatorDefault, CFNumberFloatType, &myFloat);
}
我将如何发布numberRef
?
将它释放到您知道不再需要它的地方。我假设它是静态的,因为你有很多这样的类并且总是需要这个内存?我建议在applicationWillTerminate
. 如果您没有很多类并且并不总是需要内存,那么可能不需要将其声明为静态。
由于您使用的模式类似于创建和管理单例的方式,我想说您可以将您的对象视为实际的单例。这意味着您不需要释放它。(想一想——就我个人而言,我从未见过 Objective-C/Cocoa 中的单例实现会关心释放共享实例)。此行为与您需要对象在应用程序的整个生命周期内都处于活动状态这一事实一致。所以根本不要释放它——当进程终止时,内核会确保清理它获得的所有资源。
所有 coreFoundation 默认都是assign
-ed,所以它永远不会被保留,因此不需要释放。
需要明确的是,ARC 对 Core Foundation 对象没有任何影响。它不会尝试自动管理它们,因此您需要手动管理它们。
如果您通过 创造自己的记忆calloc/malloc
,那么您需要free
它们。
编辑 :
问:我只是想清楚地理解这一点......即使使用 ARC,我们仍然需要担心执行 CFRelease() 以及其他类型的发布,例如 CGContextRelease(context);
答:正确。ARC 只处理 ObjC 对象。它对 Core Foundation 对象一无所知。