gpt4 book ai didi

objective-c - `objc_autoreleasePoolPush()` 和 `objc_autoreleasePoolPop()` 函数和 `@autoreleasepool` block

转载 作者:搜寻专家 更新时间:2023-10-30 20:03:02 32 4
gpt4 key购买 nike

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

但是,当我使用 @autoreleasepool block 编译 Objective-C 文件时,即使使用 -fobjc-arc 也不会调用这两个函数。相反,编译器生成代码以在开始时分配一个新的 NSAutoreleasePool 对象(具有等同于 [[NSAutoreleasePool alloc] init] 的内容)并排空池(使用-drain 调用)在 block 的末尾。

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

最佳答案

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

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

关于objective-c - `objc_autoreleasePoolPush()` 和 `objc_autoreleasePoolPop()` 函数和 `@autoreleasepool` block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15014152/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com