MRC和ARC之间的区别

block是不是一个对象?是一个对象,苹果官方文档有说明(搜索working with block)

如何判断当前文件是MRC,还是ARC

1.dealloc能否调用super,只有MRC才能调用super

2.能否使用retain,release.如果能用就是MRC

ARC管理原则:只要一个对象没有被强指针修饰就会被销毁,默认局部变量对象都是强指针,存放到

堆里面,只是局部变量的强指针会在代码块结束后释放,对应所指向的内存空间也会被销毁

MRC了解开发常识:1.MRC没有strong,weak,局部变量对象就是相当于基本数据类型

2.MRC给成员属性赋值,一定要使用set方法,不能直接访问下划线成员属性赋

值,因为使用下划线是直接赋值(如_name = name),而set方法会做以下的事情

- (void)setRoom:(Room*)room

{

/*对旧房间进行release,需要注意的是,第一次对_room进行release没有任何

变化,因为刚开始_room的值是nil,对一个空指针release是没有影响的,先判断

是否为同一房间,因为房间相同就不需要release和retain,只有房间不同,才需要对

旧值release,对新值retain

*/

if(_room!= room) {

[_roomrelease];

_room= [roomretain];

}

}

总结:只要block没有引用外部局部变量,不管是在MRC还是ARC中,block都放在全局区(静态区

static)

MRC:管理block

只要Block引用外部局部变量,block放在栈里面.

block只能使用copy,不能使用retain,使用retain,block还是在栈里面

当block代码块结束后就会被释放,这样就无法在其它方法中调用block了

ARC:管理block

只要block引用外部局部变量,block放在堆里面

block使用strong.最好不要使用copy,因为copy的set方法并不是直接赋值,而是在set

方法中会进行进一步的判断,判断是否需要重新开辟内存以及深拷贝,浅拷贝的问题

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容