1.__block:
使用场景:block内部只能够访问来自block外部的变量,但是却不能够修改外部的变量,因为是将该外部变量拷贝到其数据结构中来访问的,数据是只读的,block内部不能修改外面的局部变量,如果需要修改来自block外部的变量的话,需要使用__block修饰,这样就可以在block中修改该外部变量了
2.__weak:
使用场景:在使用Block时,有时候会用到self,Block内部对self默认都是强引用。在ARC下,编译器将Block从栈区拷贝到堆区,Block会强引用和持有self,而self 也会强引用和持有Block,于是就造成了循环引用。此时就需要使用__weak,在修饰变量时,修饰符修饰变量self,让 block 不强引用self,从而破除循环(你中有我,我中有你,然后谁都不会释放掉,内存泄露)
3.__strong:
使用场景:使用了__weak修饰self后,为了保证使用时不会被释放,就需要添加该修饰符,让其在使用后再进行释放