Objective-C的Block实质与实现探究 part-8

__block变量存储域


Objective-C的Block实质与实现探究 part-8_第1张图片
《Objective-C高级编程 iOS与OS X多线程和内存管理》表2-5

在一个Block中使用__block变量,对Block进行复制的过程:

Objective-C的Block实质与实现探究 part-8_第2张图片
将Block复制到堆

“使用”是Block在栈中的对__block变量的语义,“持有”是Block在堆中对__block变量的语义。“持有”是与对象的引用计数有关的语义。__block变量有isa指针,所以是个对象,“持有”语义对它同样适用。

在多个Block中使用__block变量,对Block进行复制的过程:


Objective-C的Block实质与实现探究 part-8_第3张图片
将Block0复制到堆
Objective-C的Block实质与实现探究 part-8_第4张图片
将Block1复制到堆

一个Block持有__block变量,Block被废弃时,__block变量被废弃的过程:


Objective-C的Block实质与实现探究 part-8_第5张图片
Block被废弃

多个Block持有__block变量,Block被废弃时,__block变量被废弃的过程:

Objective-C的Block实质与实现探究 part-8_第6张图片
Block0,Block1依次被废弃

你可能感兴趣的:(Objective-C的Block实质与实现探究 part-8)