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