摘要:或者使用了对象的属性在这样的情况下,强引用,也持有该对象,导致循环引用。一般使用或时使用的内联是不会出现循环引用的。而在过程中,是不会释放的,完美。这可能会导致奇怪的问题。
目标:block执行过程中,self不会释放;执行完可以释放。
最初block中直接使用self会强引用。
self.myBlock = ^() { [self doSomething]; };
或者使用了对象的属性
self.myBlock = ^() { NSString *str = _str; NSString *str2 = self.str; };
在这样的情况下,self强引用block,block也持有该对象,导致循环引用。
要注意的是,只有在self强引用block的时候才会有这样的问题。一般使用GCD或NSOperation时使用的内联block是不会出现循环引用的。
加入weak self__weak __typeof(self) weakSelf = self; self.myBlock = ^() { [weakSelf doSomething]; };
这样,self持有了block,但block对self是弱引用,就不会导致循环引用了。
而在[weakSelf doSomething]过程中,self是不会释放的,完美。
但是,如果是这样呢?
__weak __typeof(self) weakSelf = self; self.myBlock = ^() { [weakSelf doSomething]; [weakSelf doSomething2]; };
在[weakSelf doSomething]和[weakSelf doSomething2]之间,self可能会被释放掉。这可能会导致奇怪的问题。
加入strong self__weak __typeof(self) weakSelf = self; self.myBlock = ^() { __strong __typeof(self) strongSelf = weakSelf; [strongSelf doSomething]; [strongSelf doSomething2]; };
这样,block既没有持有self,又能保证block在执行过程中self不被释放,真正达到了最初的目标。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/17322.html
摘要:追踪内存泄露的根源。为此,在我们的开发周期上,我们可能无法尽可能早的定位和修复内存泄露问题。自动化可以在不需要更多开发者的情况下,更快的找到内存泄露。 博文链接:http://ifujun.com/yi-wen-zai-iosshang-zi-dong-jian-ce-nei-cun-xie-lu/原文链接:https://code.facebook.com/posts/5839463...
摘要:在里,每个继承自的对象都会记录自身的引用计数,一番加加减减之后,变成就会释放掉。引用计数减少的操作就是了。要知道,返回的对象引用计数是有的,而并不是。 罗里吧嗦颠三倒四,单纯的个人笔记。 MRC 引用计数上一篇已经有大概讲过。在Objective-C里,每个继承自NSObject的对象都会记录自身的引用计数,一番加加减减之后,变成0就会释放掉。MRC是Mannul Reference ...
摘要:深入研究捕获外部变量和实现原理掘金前言是语言的扩充功能,而在和中引入了这个新功能。是由和两位大神在对的开发过程中中所有变换操作底层实现分析上掘金前言在上篇文章中,详细分析了是创建和订阅的详细过程。 深入研究Block捕获外部变量和__block实现原理 - 掘金 前言 Blocks是C语言的扩充功能,而Apple 在OS X Snow Leopard 和 iOS 4中引入了这个新功能B...
摘要:深入研究捕获外部变量和实现原理掘金前言是语言的扩充功能,而在和中引入了这个新功能。是由和两位大神在对的开发过程中中所有变换操作底层实现分析上掘金前言在上篇文章中,详细分析了是创建和订阅的详细过程。 深入研究Block捕获外部变量和__block实现原理 - 掘金前言 Blocks是C语言的扩充功能,而Apple 在OS X Snow Leopard 和 iOS 4中引入了这个新功能Bl...
阅读 721·2023-04-25 23:47
阅读 710·2021-11-23 09:51
阅读 3912·2021-09-26 10:17
阅读 3484·2021-09-10 11:19
阅读 3102·2021-09-06 15:10
阅读 3393·2019-08-30 12:49
阅读 2257·2019-08-29 13:20
阅读 1632·2019-08-28 18:14