当MRR遇到ARC就嫁了吧!

ARC是咩?
ARC是iOS 5推出的新功能全称叫 ARC(Automatic Reference Counting)。简单地说,就是代码中自动加入了retain/release,原先需要手动添加的用来处理内存管理的引用计数的代码可以自动地由编译器完成了。
该机能在 iOS 5/ Mac OS X 10.7 开始导入,利用 Xcode4.2 可以使用该机能。简单地理解ARC,就是通过指定的语法,让编译器(LLVM 3.0)在编译代码时,自动生成实例的引用计数管理部分代码。有一点,ARC并不是GC,它只是一种代码静态分析(Static Analyzer)工具。

旧内存管理规则:

1.(谁开发,谁治理),如果使用“alloc”或“new”开头或名字中包含“copy”的方法(例如alloc,newObject或mutableCopy)创建了一个对象,就需要使用释放release或自动释放autorelease来释放。

而使用ARC后,我们可以不需要这样做了,甚至连最基础的release都不需要了:

但是,爽就是要付出代价的,一堆ARC规则袭来:
1.retain, release, autorelease, dealloc由编译器自动插入,不能在代码中使用
2.dealloc虽然可以被重载,但是不能调用[super dealloc],也不能被调用
3.必须遵守内存管理的命名规则;
4.不能使用NSAllocateObject/NSDeallocateObject;
5.使用@autoreleasepool块替代NSAutoreleasePool;
6.不能使用区域(NSZone);
7.对象型变量不能作为C语言结构体(struct/union)的成员;
8.显示转换"id"和"void * ";

当MRR遇到到ARC,表着急

1.arc的设置是在build phases中修改compiler Flags的值。(1,直接在targets->build phases中修改compiler Flags,是否支持arc。添加:-fobjc-arc,就可以让旧项目支持arc。如果想让原来支持arc的不使用arc则添加-fno-objc-arc)
2,如果使用了arc,在@property声明中,用strong和weak代替相应的retain, copy,和assign。(不过此处有个疑问,在使用了MRR后呢,原来的weak,strong,是否还需要替换呢?)
3,如果使用了arc,NSAutoReleasePool也不能使用,测试发现,用@autoreleasepool 代替,不会编译报错。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值