1.在ARC下面使用block,无论怎样,你都需要注意这几点:
-
外部对象进入block,请使用__weak修饰后再进入到block中
-
不要在block中初始化对象,请在block的外面初始化对象后再进入到block中去
-
无论该block是不是copy的,请都当做copy的block来处理
-
传入到堆区block中的对象会被强引用
2.Block的类型与内存管理
-
据Block在内存中的位置分为三种类型NSGlobalBlock,NSStackBlock, NSMallocBlock。
- NSGlobalBlock:类似函数,位于text段;
- NSStackBlock:位于栈内存,函数返回后Block将无效;
- NSMallocBlock:位于堆内存。
-
此处我们可以得知,在处理对象时,block会malloc的.
-
:这种block会导致_model对象泄露吗?
-
问:方法中的block是怎么回事呢?
-
:MRC中的
__block
与ARC中的__weak
有啥联系?-
在MRC中,
__block
可以让一个变量在 block 中进行修改而不会被这个 block retain. -
在ARC中,
__weak
才能让一个变量在 block 中不被这个block强引用. -
__block
是在MRC中使用的. -
__weak
是在ARC中使用的.
-