摘录自易飞扬博客:http://www.yifeiyang.net/以及一米马http://www.1mima.com/?p=117
ARC基本规则
- 代码中不能使用retain, release, retain, autorelease
- 不重载dealloc(如果是释放对象内存以外的处理,是可以重载该函数的,但是不能调用[super dealloc])
- 不能使用NSAllocateObject, NSDeallocateObject
- 不能在C结构体中使用对象指针
- id与void *间的如果cast时需要用特定的方法(__bridge关键字)
- 不能使用NSAutoReleasePool、而需要@autoreleasepool块
- 不能使用“new”开始的属性名称 (如果使用会有下面的编译错误”Property’s synthesized getter follows Cocoa naming convention for returning ‘owned’ objects”)
- 只要对象的持有者存在(对象被强参照),那么就可以使用该对象。
-
NSString *str = [[NSString alloc]initWithString:@"string"];
NSString* str2 = str;
str = [[NSString alloc]initWithString:@"other string"];// 此时 @“string”对象被str2保留了
-
-
对象失去了持有者后,即被破弃。
NSString *str = [[NSStringalloc]initWithString:@"string"];
__weak NSString* weakString = str;
str = [[NSStringalloc]initWithString:@"other string"];//此时 @“string”对象被自动遗弃
__bridge关键字说明: __bridge只做类型转换,但是不修改对象(内存)管理权; __bridge_retained(也可以使用CFBridgingRetain)将Objective-C的对象转换为Core Foundation的对象,同时将对象(内存)的管理权交给我们,后续需要使用CFRelease或者相关方法来释放对象; __bridge_transfer(也可以使用CFBridgingRelease)将Core Foundation的对象转换为Objective-C的对象,同时将对象(内存)的管理权交给ARC。