当MRR遇到ARC就嫁了吧!

来源:互联网 发布:网络捕鱼游戏下载 编辑:程序博客网 时间:2024/05/20 06:36

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 代替,不会编译报错。

1 0
原创粉丝点击