Objective-C - retainCount返回错误的值

时间:2018-04-11 08:17:42

标签: ios objective-c retaincount

@class Person; 
@protocol PersonDelegate <NSObject> 
- (void)sendLetterForPerson:(Person *)p; 
@end 

@interface Person : NSObject 
@property (nonatomic, weak) id <PersonDelegate> delegate; 

- (void)writeLetterComplete; 
@end

@interface TestController ()<PersonDelegate> 
    @property (nonatomic, strong) Person *per; 
@end

_per = [[Person alloc] init];
_per.delegate = self;

NSLog(@"%lu",(unsigned long)_per.retainCount);
NSLog(@"%lu",(unsigned long)_per.delegate.retainCount);

MRC创建一个Person对象_per,设置委托,打印retainCount。 _per.retainCount是一个,但_per.delegate.retainCount是12,为什么?

1 个答案:

答案 0 :(得分:3)

你应该看看official document for retainCount

  

此方法在调试内存管理问题时没有任何价值。因为任何数量的框架对象可能保留了一个对象以保存对它的引用,而同时自动释放池可能在对象上保留任意数量的延迟版本,所以您不太可能从此获取有用信息方法

如果_per.delegate.retainCount为12,我认为这不是问题。_per.delegate这里是TestController。也许viewController引用由另一个由默认系统设计的对象保存。

例如,如果使用viewController推送UINavigationControllernavigationController将保留1个引用viewController并将retainCount增加1。