簡(jiǎn)介:block作為消息傳遞,在oc中的用處非常的廣,自定義視圖的回調(diào),modal視圖的回調(diào),多線程中異步去加載數(shù)據(jù)等等,它的使用場(chǎng)景和代理有相似的地方,又比代理要廣泛的多,所以說(shuō),block是每一個(gè)程序員都要去掌握的一個(gè)知識(shí)點(diǎn).
block 是c語(yǔ)言函數(shù) 是一個(gè)匿名的函數(shù),基本的定義格式如下所示
void (^myBlock)() = ^ {
};
block 的使用有兩點(diǎn)需要注意的:1.block 如果引用了外部的變量,會(huì)對(duì)引用的變量做一次copy,此時(shí)引用計(jì)數(shù)會(huì)+1;
2.block 不可以修改局部的變量,不過(guò)要修改的話,要使用__block 來(lái)修飾局部變量;
block 在ARC中,是保存在堆區(qū),在MRC中是保存在棧區(qū),所以在MRC中需要使用使用copy 來(lái)記錄block屬性,在ARC中的話,是Strong,或者是copy都可以;
block呢存在的一個(gè)很大的問(wèn)題,就是循環(huán)引用,如果我們掌握了它循環(huán)引用的原因,那么以后再項(xiàng)目中,我們就可以大膽,放心的去使用了.
造成循環(huán)引用是有3種情況,"self . ",屬性記錄block,以及成員變量,成員變量一定不要出現(xiàn)在block中,