目标c-`objc_autoreleasePoolPush()`和`objc_autoreleasePoolPop()`



我在某处读到,当我们使用启用ARC的@autoreleasepool { }块时,编译器会生成代码,分别在块的开头和结尾调用objc_autoreleasePoolPush()objc_autoreleasePoolPop()函数。

然而,当我使用@autoreleasepool块编译Objective-C文件时,即使使用-fobjc-arc,也不会调用这两个函数。相反,编译器生成代码,在开始时分配一个新的NSAutoreleasePool对象(具有相当于[[NSAutoreleasePool alloc] init]的东西),并在块结束时耗尽池(具有-drain调用)。

那么,objc_autoreleasePoolPush()objc_autoreleasePoolPop()函数真的应该在启用ARC的情况下调用吗?如果是,缺少哪些编译器选项?

objc_autoreleasePoolPush()objc_autoreleasePoolPop()实际上应该分别在@autoreleasepool块的开头和和和处调用,从OSX 10.7/iOS 5.0开始,由编译器生成代码。缺少的编译器选项是-fobjc-runtime=macosx-10.7

顺便说一句,ARC与这一切无关,因此即使没有启用ARC,@autoreleasepool块也会使编译器生成对这两个函数的调用。

您的部署目标设置为什么?它可能需要OSX 10.8/iOS 6才能获得更新的做事方式。

相关内容

  • 没有找到相关文章

最新更新