gpt4 book ai didi

ios - 我是否需要 block 中的 strongSelf 来保持 self 存活并且 strongSelf 真的有效吗?

转载 作者:行者123 更新时间:2023-11-29 02:12:46 25 4
gpt4 key购买 nike

这是我学到的:当使用self保留 block 时

  1. 我需要一个 weakSelf 来打破保留周期
  2. 我需要一个 strongSelf 来防止 self 中途变成 nil

所以我想测试一下 strongSelf 是否真的可以像这样让 self 保持活力:

@implementation ViewController

- (void)viewDidLoad {
[super viewDidLoad];
NSLog(@"viewDidLoad");
self.test = @"test";
NSLog(@"%@",self.test);
__weak typeof(self)weakSelf = self;
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
__strong typeof(weakSelf)strongSelf = weakSelf;
strongSelf.test = @"newTest";
NSLog(@"%@",strongSelf.test);
});
}

- (void)dealloc {
NSLog(@"dealloc");
}

@end

ViewController 将被插入导航 Controller 并立即弹出。输出是

sample

为什么为空?

还有一个问题,我有一个项目,其中包含大量 weakSelf, block 中没有 strongSelf,我收到大量信号 11 崩溃。有关系吗?是否值得为它们中的每一个添加 strongSelf

最佳答案

strongSelf 确保如果 self 尚未释放,则它不会在 block 执行期间释放。

如果在创建 strongSelf 之前 self 已经消失,它将为 nil。

你应该检查一下,如果 strongSelf 确实包含一些东西:

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
typeof(weakSelf)strongSelf = weakSelf; // __strong is not needed
if(strongSelf){
strongSelf.test = @"newTest";
NSLog(@"%@",strongSelf.test);
}
});

关于ios - 我是否需要 block 中的 strongSelf 来保持 self 存活并且 strongSelf 真的有效吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29093677/

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