ios 基础问题记录

105 阅读1分钟

1.对于block,理解,mrc和arc下有什么区别,使用注意事项

区别:

 block可以存储在栈中,也可以在堆中
 默认存储在栈中,不需要管理内存
 存储在堆中的block会对block进行retain操作
(MRC)block在堆中时,不想对block进行retain操作,前面加__block
(ARC)前面加__weak或__unsafe_unretained
__weak和__unsafe_unretained的区别:__weak则在释放时会对对象赋值nil,后者不会
Block_copy使栈中的block转移到堆中,并对block会引用的对象进行retain操作
避免block引用的对象进行retain操作,在引用对象声明时前面加__block

注意事项:
防止循环引用