Objective-C - ARC(Automatic Reference Counting)自动引用技术详解
2015-04-23 09:52
585 查看
ARC特点与判断准则
/* ARC的判断准则:只要没有强指针指向对象,就会释放对象 1.ARC特点 1> 不允许调用release、retain、retainCount 2> 允许重写dealloc,但是不允许调用[super dealloc] 3> @property的参数 * strong :成员变量是强指针(适用于OC对象类型) * weak :成员变量是弱指针(适用于OC对象类型) * assign : 适用于非OC对象类型 4> 以前的retain改为用strong 指针分2种: 1> 强指针:默认情况下,所有的指针都是强指针 __strong 2> 弱指针:__weak */ int main() { Dog *d = [[Dog alloc] init]; Person *p = [[Person alloc] init]; p.dog = d; d = nil; NSLog(@"%@", p.dog); return 0; } void test() { // 错误写法(没有意义的写法) __weak Person *p = [[Person alloc] init]; NSLog(@"%@", p); NSLog(@"------------"); }
@class Dog; @interface Person : NSObject @property (nonatomic, strong) Dog *dog; @property (nonatomic, strong) NSString *name; @property (nonatomic, assign) int age; @end
@implementation Person - (void)dealloc { NSLog(@"Person is dealloc"); // [super dealloc]; } @end
@interface Dog : NSObject @end
@implementation Dog - (void)dealloc { NSLog(@"Dog is dealloc"); } @end
ARC循环引用问题
/** * 当两端循环引用的时候,解决方案: 1> ARC 1端用strong,另1端用weak 2> 非ARC 1端用retain,另1端用assign */ int main() { Person *p = [[Person alloc] init]; Dog *d = [[Dog alloc] init]; p.dog = d; d.person = p; return 0; }
@class Dog; @interface Person : NSObject @property (nonatomic, strong) Dog *dog; @end
@implementation Person - (void)dealloc { NSLog(@"Person--dealloc"); } @end
@class Person; @interface Dog : NSObject @property (nonatomic, weak) Person *person; @end
@implementation Dog - (void)dealloc { NSLog(@"Dog--dealloc"); } @end
相关文章推荐
- 自动引用计数(ARC Automatic Reference Counting)
- Automatic Reference Counting (ARC) 自动引用计数
- Swift 自动引用计数(Automatic Reference Counting, ARC)
- Automatic Reference Counting (ARC) 自动引用计数
- Swift开篇014->自动引用计数(Automatic Reference Counting)
- 如何禁用iOS 5 ARC 自动释放 (Automatic Reference Counting) ?
- Swift-自动引用计数(Automatic Reference Counting)(十四)
- ARC(Automatic Reference Counting )技术概述
- 【iOS开发】JSONKit does not support Objective-C Automatic Reference Counting(ARC)
- ARC(Automatic Reference Counting )技术概述
- 自动引用计数 -- Automatic Reference Counting
- ARC(Automatic Reference Counting )技术概述
- Welcome-to-Swift-16自动引用计数(Automatic Reference Counting)
- ARC(Automatic Reference Counting )技术概述
- ARC(Automatic Reference Counting )技术概述(转)
- ARC(Automatic Reference Counting )技术概述
- Swift 自动引用计数(Automatic Reference Counting)
- 【转】ARC(Automatic Reference Counting )技术概述
- 对照Java学习Swift--自动引用计数(Automatic Reference Counting)