gpt4 book ai didi

objective-c - 在 ARC 下,当通过属性分配给 ivar 时, block 是否会自动复制?

转载 作者:太空狗 更新时间:2023-10-30 03:31:42 26 4
gpt4 key购买 nike

假设

typedef void (^MyResponseHandler) (NSError *error);
@property (strong, nonatomic) MyResponseHandler ivarResponseHandler;
synthesize ivarResponseHandler = _ivarResponseHandler;

- (void)myMethod:(MyResponseHandler)responseHandler
{
self.ivarResponseHandler = responseHandler;
...
}

通过@property 赋值给ivar 是否正确?我知道在手动内存管理中,您需要 self.ivarResponseHandler = [responseHandler copy]; 来确保 block 从堆栈复制到堆。但是在观看 2011 年 WWDC session 322 - Objective-C 的深入进展(第 25 分钟)时,演讲者说 ARC 自动处理将 block 分配给 ivar。我只是想确认一下。

最佳答案

ARC 在您发布的代码中自动为您执行复制。

如果您将 block 转换为 id,ARC 将不会为您执行复制。例如,在这段代码中,ARC 不会执行复制,因为 addObject: 的参数类型是 id:

NSMutableArray *array = [NSMutableArray array];
[array addObject:responseHandler];

关于objective-c - 在 ARC 下,当通过属性分配给 ivar 时, block 是否会自动复制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10417851/

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