我有一个头文件(C Like)
我必须制作一个实现它的Obj-c库(或几个.m -s)。
任何打电话给图书馆的人都将成为C程序。
但是,我不想手动处理内存分配,我想使用ARC。
我可以在我的函数中使用autoreleasepool{}
以使ARC正常工作......
或者我必须在几年后回去/卸载我的懒惰并手动执行此操作?
答案 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入口点执行此操作,否则您几乎肯定会泄漏内存。如果你没有这样做,你应该在控制台上看到消息,如“自动释放的对象,而没有自动释放池。只是泄漏。”