關于block:修飾符 用copy(要從堆區(qū) 拷貝到棧區(qū))
前綴修飾符:
__block:默認情況下妆绞,block會把變量復制為自己私有的const變量,也就是說block會捕獲棧上的變量嘁锯,復制為自己的const變量,__block修飾符的作用就是,只要捕獲到該變量被block持有踱稍,就將該變量在棧中的內存地址 放到堆中弟跑,此時 block內部還是外部灾前,地址就一致,就可以隨便改動了孟辑。
__weak :
(1)block 循環(huán)引用:
@property (nonatomic, copy) void (^block)(void);
當block 作為屬性被強引用后哎甲,
- (void)configureBlock {
self.block = ^{
[self doSomething];
};
}
在block內部又對self進行了強引用(方法調用)蔫敲,在這種情況下,由于其相互引用炭玫,內存不能夠被釋放奈嘿,造成內存泄漏,為了解決循環(huán)引用吞加,我們經常就通過聲明一個weakSelf來解決裙犹,加入weakSelf后,block對self的強引用就變成了弱引用衔憨,這樣在屬性所指的對象遭到摧毀時叶圃,屬性值也被清空,打破循環(huán)引用践图,