objective-c – 在块保留周期中调用函数
发布时间:2020-12-16 07:01:24 所属栏目:百科 来源:网络整理
导读:如果我从块内部调用的函数引用“self”,那会创建一个保留周期吗? __weak id weakSelf = self;- (void)firstFunction{ id strongSelf = weakSelf; if (!strongSelf) return; [anObject performBlock:^{ [strongSelf secondFunction]; }];}- (void)secondFunc
如果我从块内部调用的函数引用“self”,那会创建一个保留周期吗?
__weak id weakSelf = self; - (void)firstFunction { id strongSelf = weakSelf; if (!strongSelf) return; [anObject performBlock:^{ [strongSelf secondFunction]; }]; } - (void)secondFunction { [self doSomeCrazyStuff]; self.counter++; //etc. } 我在’secondFunction’中调用’self’,我是否需要将弱指针传递给此函数并使用它? 解决方法
潜在的.
保留周期是通过具有强引用的循环来创建的,除了变量上的限定符(即弱,强)之外,那些引用来自的实际变量是无关紧要的.如此强大的自我引用的自我是对自我的强烈参考,你有一个保留周期的潜力,就像你自己使用自我一样. 回复:评论 让您的块保持弱引用是解决此问题的标准方法.如果在块中使用weakSelf,则没有强引用,如果在块调用时,weakSelf为nil则调用[weakSelf secondFunction]将不执行任何操作 – 您可以在Objective-C中发送nil消息.您不会创建一个循环,在块的调用期间可能会创建一个强大的引用副本,但这将在调用该块后返回. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |