iOS - 引用计数问题

时间:2014-03-31 08:14:53

标签: ios iphone sdk

我正在做一些关于引用计数增加的工作。以下是样本。

.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对所有这些,我对此有点困惑,请帮帮我。

1 个答案:

答案 0 :(得分:3)

它打印-1,因为您使用了错误的字符串格式。

由于retainCount返回NSUIngeter(即无符号整数),您应该使用

NSLog(@"%lu", (unsigned long)myNSUInteger); 

除此之外,值得一提的是,永远不会依赖retainCount

请参阅When To You Retain Count

另外,来自official documentation

  

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