__block变量存储域

当Block从栈复制到堆上,那么对__block变量又是如何处理的呢?
使用__block变量的Block从栈复制到堆上时,__block变量也会受到影响。

屏幕快照 2016-03-11 上午9.43.01.png

若在1个Block中使用__block变量,则当该Block从栈复制到堆上时,使用的所有__block变量也必定配置在栈上。这些__block变量也全部被从栈复制到堆上。此时,Block持有__block变量。

屏幕快照 2016-03-11 上午9.47.20.png

在多个Block中使用__block变量时,任何一个Block从栈复制到堆时,__block变量也会一并从栈复制到堆并被该Block所持有。当剩下的Block从栈复制到堆时,被复制的Block持有__block变量,并增加__block变量的引用计数

屏幕快照 2016-03-11 上午9.49.03.png

屏幕快照 2016-03-11 上午9.49.16.png

如果配置在堆上的Block被遗弃,那么它使用的Block变量也将被释放。

当Block从栈复制到堆上,那么对__block变量又是如何处理的呢?
使用__block变量的Block从栈复制到堆上时,__block变量也会受到影响。

屏幕快照 2016-03-11 上午9.43.01.png

若在1个Block中使用__block变量,则当该Block从栈复制到堆上时,使用的所有__block变量也必定配置在栈上。这些__block变量也全部被从栈复制到堆上。此时,Block持有__block变量。

屏幕快照 2016-03-11 上午9.47.20.png

在多个Block中使用__block变量时,任何一个Block从栈复制到堆时,__block变量也会一并从栈复制到堆并被该Block所持有。当剩下的Block从栈复制到堆时,被复制的Block持有__block变量,并增加__block变量的引用计数

屏幕快照 2016-03-11 上午9.49.03.png

屏幕快照 2016-03-11 上午9.49.16.png

如果配置在堆上的Block被遗弃,那么它使用的Block变量也将被释放。

屏幕快照 2016-03-11 上午9.59.47.png

当Block从栈复制到堆上,那么对__block变量又是如何处理的呢?
使用__block变量的Block从栈复制到堆上时,__block变量也会受到影响。

屏幕快照 2016-03-11 上午9.43.01.png

若在1个Block中使用__block变量,则当该Block从栈复制到堆上时,使用的所有__block变量也必定配置在栈上。这些__block变量也全部被从栈复制到堆上。此时,Block持有__block变量。

屏幕快照 2016-03-11 上午9.47.20.png

在多个Block中使用__block变量时,任何一个Block从栈复制到堆时,__block变量也会一并从栈复制到堆并被该Block所持有。当剩下的Block从栈复制到堆时,被复制的Block持有__block变量,并增加__block变量的引用计数

屏幕快照 2016-03-11 上午9.49.03.png

屏幕快照 2016-03-11 上午9.49.16.png

如果配置在堆上的Block被遗弃,那么它使用的Block变量也将被释放。

当Block从栈复制到堆上,那么对__block变量又是如何处理的呢?
使用__block变量的Block从栈复制到堆上时,__block变量也会受到影响。

屏幕快照 2016-03-11 上午9.43.01.png

若在1个Block中使用__block变量,则当该Block从栈复制到堆上时,使用的所有__block变量也必定配置在栈上。这些__block变量也全部被从栈复制到堆上。此时,Block持有__block变量。

屏幕快照 2016-03-11 上午9.47.20.png

在多个Block中使用__block变量时,任何一个Block从栈复制到堆时,__block变量也会一并从栈复制到堆并被该Block所持有。当剩下的Block从栈复制到堆时,被复制的Block持有__block变量,并增加__block变量的引用计数

屏幕快照 2016-03-11 上午9.49.03.png

屏幕快照 2016-03-11 上午9.49.16.png

如果配置在堆上的Block被遗弃,那么它使用的Block变量也将被释放。

屏幕快照 2016-03-11 上午9.59.47.png
屏幕快照 2016-03-11 上午10.32.13.png
屏幕快照 2016-03-11 上午10.33.51.png

通过该功能,无论在Block语法中,Block语法外使用__block变量,还是变量配置栈上或者堆上,都可以顺利地访问同一个__block变量。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容