iOS中Block内存管理分为三种:
- NSGloabBlock
- NSStackBlock
- NSMallocBlock
1: MRC中使用的__
block可以表示若引用,ARC中要使用__
weak修饰表示弱引用.
- NSGloabBlock:retain,copy,release 不会正价引用计数
- NSStackBlock:retain.release ,copy不会改变引用计数,copy可以
- NSMallocBlock:位于堆区,retain,release.引用计数改变.
注意:防止block循环引用,正确使用weak 和__
block的修饰
注意 一个类中不定义属性而只定义成一个变量在block中可以直接使用,并且值也是在block中可以改变的,但是会照成循环引用,因为这个变量属于类本身,所以避免这种情况应该定义成属性,如果在block外部使用__
block修饰的话,值不会改变,但是不会照成循环引用,MRC中__
block是不会引起retain,但是在ARC中__
block会引起retain.
网友评论