@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是1,但_per.delegate.retainCount是12,为什么?
发布于 2018-04-11 08:41:39
你应该看看official document for retainCount
。
此方法在调试内存管理问题时没有任何价值。由于任意数量的框架对象可能保留了一个对象以保存对它的引用,而同时自动释放池可能保存了对象上任意数量的延迟释放,因此您不太可能从此方法中获得有用的信息。
我想如果_per.delegate.retainCount
是12岁也没问题,这里的_per.delegate
是一个TestController
。也许viewController
引用由默认系统设计的另一个对象持有。
例如,如果使用UINavigationController
推送viewController
,则navigationController
将保留1个对viewController
的引用,并将retainCount
增加1。
https://stackoverflow.com/questions/49769964
复制