自动计数(ARC)是一个编译期间工作的能够帮你管理内存的技术,通过它,程序人员可以不需要在内存的retain,释放等方面花费精力。
ARC在编译期间为每个Objective-C指针变量添加合适的retain, release, autorelease等函数,保存每个变量的生存周期控制在合理的范围内,以期实现代码上的自动内存管理。
ios4版本及以上才能支持ARC。
使用ARC需要注意以下几点:
1. 禁止使用dealloc,
retain
, release
, retainCount
, autorelease。禁止任何形式调用和实现(dealloc可能会被实现),包括使用
@selector(retain)
, @selector(release)
等的隐含调用。
你可能会实现一个和内存管理没有关系的dealloc,譬如只是为了调用[systemClassInstance setDelegate:nil]
,但是请不要调用[super dealloc]
,因为编译器会自动处理这些事情。
2.不能在C语言中的结构中使用Objective-c中的类的指针。
3.不能使用NSAutoreleasePool
.作为替代,@autoreleasepool被引入,你可以使用这个效率更高的关键词。
4.不能使用memory zones. NSZone不再需要
—本来这个类已经被现代Objective-c废弃。
5.禁止以new开头的属性变量命名。
属性变量修饰符
weak和strong两个修饰符是新引进的,使用例子如下:
// 下面的作用和: @property(retain) MyClass *myObject;相同 | ||||
@property(strong) MyClass *myObject; | ||||
| ||||
// 下面的作用和"@property(assign) MyClass *myObject;"相识 | ||||
// 不同的地方在于,如果MyClass的实例析构后,这个属性变量的值变成nil,而不是一个野指针, | ||||
| ||||
@property(weak) MyClass *myObject;
|