我应该在库中使用Autoreleasepool吗?

时间:2015-07-09 18:29:45

标签: objective-c macos cocoa automatic-ref-counting nsautoreleasepool

我有一个头文件(C Like)

我必须制作一个实现它的Obj-c库(或几个.m -s)。

任何打电话给图书馆的人都将成为C程序。

但是,我不想手动处理内存分配,我想使用ARC。

我可以在我的函数中使用autoreleasepool{}以使ARC正常工作......

或者我必须在几年后回去/卸载我的懒惰并手动执行此操作?

2 个答案:

答案 0 :(得分:1)

  

我可以在我的函数中使用autoreleasepool {},以使ARC正常工作......

@autoreleasepool不仅适用于ARC。您可以@autoreleasepool-fobjc-arc同时使用-fno-objc-arc

http://clang.llvm.org/docs/AutomaticReferenceCounting.html#autoreleasepool

  

@autoreleasepool可以在非ARC翻译单元中使用,具有等效的语义。

此外,

  

任何打电话给图书馆的人都将成为C程序。

<强> EDITED

你的意思是应用程序是用C语言编写的,库程序是用Objective-C语言编写的吗?在这种情况下,您应该在代码中使用@autoreleasepool。通常,对于OS X Cocoa应用程序,有一个具有自动释放池的runloop,因此在某些情况下(例如,避免大量内存使用),代码中不需要@autoreleasepool

<强> EDITED

无论如何,您可以在库代码中使用ARC,但应使用-fobjc-arc选项进行编译。

答案 1 :(得分:1)

  

我可以在我的函数中使用autoreleasepool {},以使ARC正常工作......

是。如果您是从C调用的,那么必须在每个C入口点执行此操作,否则您几乎肯定会泄漏内存。如果你没有这样做,你应该在控制台上看到消息,如“自动释放的对象,而没有自动释放池。只是泄漏。”