我正在做一些关于引用计数增加的工作。以下是样本。
.h文件。
@property (nonatomic, retain) NSString *s1;
.m文件
@synthesize s1;
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
s1 = [[NSString alloc] init];
NSLog(@"%d",[s1 retainCount]);
[s1 retain];
NSLog(@"%d",[s1 retainCount]);
[s1 copy];
NSLog(@"%d",[s1 retainCount]);
}
当我找到引用计数时,它显示-1对所有这些,我对此有点困惑,请帮帮我。
答案 0 :(得分:3)
它打印-1,因为您使用了错误的字符串格式。
由于retainCount
返回NSUIngeter
(即无符号整数),您应该使用
NSLog(@"%lu", (unsigned long)myNSUInteger);
除此之外,值得一提的是,永远不会依赖retainCount
。
另外,来自official documentation:
此方法在调试内存管理问题时没有任何价值。 因为任何数量的框架对象都可能保留了一个对象 为了保持对它的引用,同时自动释放 池可能在对象上持有任意数量的延迟版本,它 你不太可能从这种方法中获得有用的信息。