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