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,设置委托,打印保留计数。_per.retainCount 是 1,但 _per.delegate.retainCount 是 12,为什么?

你应该看看官方文件retainCount

此方法在调试内存管理问题时没有价值。由于任意数量的框架对象可能保留了一个对象以保存对该对象的引用,而同时自动发布池可能保留对象上任意数量的延迟发布,因此您不太可能从此方法获得有用的信息。

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

例如,如果用UINavigationController推送viewControllernavigationController将保留 1 个对viewController的引用,并将retainCount增加 1。

相关内容

  • 没有找到相关文章

最新更新