gpt4 book ai didi

ios - 在调用另一个引用 self 的方法的 block 内调用一个方法会导致保留周期吗?

转载 作者:可可西里 更新时间:2023-11-01 04:39:08 27 4
gpt4 key购买 nike

doFirst 能否在此处导致保留循环?

@interface Example : NSObject
@property (nonatomic, strong) void (^block)();
@end

@implementation Example

- (void)doFirst
{
__weak id weakSelf = self;
self.block = ^ {
[weakSelf doSecond];
};

self.block();
}

- (void)doSecond
{
self.value = //...
// do other stuff involving self
}
@end

最佳答案

与 block 不同,方法不是对象;它们不能永久引用对象。

您的代码不会导致保留循环。 doSecond 中的代码显式引用 self 的事实并不意味着 self 会保留额外的时间。当您的 block 调用 doSecond 时,它的 self 来自 doFirst 中的 weakSelf 引用。

注意:当您将 block 存储为属性时,use (nonatomic, copy)而不是 (nonatomic, strong)

关于ios - 在调用另一个引用 self 的方法的 block 内调用一个方法会导致保留周期吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21909375/

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