内存管理和静态CoreFoundation变量

时间:2012-12-24 14:16:09

标签: objective-c memory-management static automatic-ref-counting core-foundation

首先,我正在使用ARC。

如果我有一个类,例如,看起来像这样:

static CFNumberRef numberRef = NULL;

+ (void)initialize {
    float myFloat = 28.37202;
    numberRef = CFNumberCreate(kCFAllocatorDefault, CFNumberFloatType, &myFloat);
}

我将如何发布numberRef

3 个答案:

答案 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对象一无所知。