我在某处读到,当我们使用@autoreleasepool { }
启用了 ARC 的块时,编译器会生成代码以分别在块的开头和结尾调用objc_autoreleasePoolPush()
和函数。objc_autoreleasePoolPop()
但是,当我用块编译一个 Objective-C 文件时@autoreleasepool
,这两个函数不会被调用,即使是-fobjc-arc
. 相反,编译器生成代码以在开始时分配一个新NSAutoreleasePool
对象(具有等效于 的东西)并在块的末尾[[NSAutoreleasePool alloc] init]
排出池(通过调用)。-drain
那么,objc_autoreleasePoolPush()
andobjc_autoreleasePoolPop()
函数真的应该在启用 ARC 的情况下调用吗?如果是,缺少哪些编译器选项?