1.用 alloc/new/copy/mutableCopy 以外的方法取得的对象,非自己生成并持有的对象。
2.引用计数:
1 2 3 4
| { id __string obj = [[NSObject alloc] init]; NSLog(@"retain count = %d", _objc_rootRetainCount(obj)); }
|
对象仅通过变量obj
的强引用被持有,所以打印为1
。
1 2 3 4 5
| { id __string obj = [[NSObject alloc] init]; id __weak o = obj; NSLog(@"retain count = %d", _objc_rootRetainCount(obj)); }
|
弱引用并不持有对象,所以赋值给附有__weak
修饰符的变量不会改变引用计数的数值,打印为1
。
1 2 3 4 5
| { id __string obj = [[NSObject alloc] init]; id __autoreleasing o = obj; NSLog(@"retain count = %d", _objc_rootRetainCount(obj)); }
|
对象被附有__strong
修饰符变量的强引用所持有,并且被注册到autoreleasepool
中,所以打印为2
。