iOS-引用计数问题

iOS-引用计数问题,ios,iphone,sdk,Ios,Iphone,Sdk,我正在做一些增加参考计数的工作。下面是示例 .h文件 @property (nonatomic, retain) NSString *s1; .m文件 @合成s1 - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. s1 = [[NSString alloc] init]; NSLo

我正在做一些增加参考计数的工作。下面是示例

.h文件

@property (nonatomic, retain) NSString *s1;
.m文件

@合成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,因为您使用了错误的字符串格式

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

NSLog(@"%lu", (unsigned long)myNSUInteger); 
除此之外,值得一提的是,你应该永远不要依赖
重新计算

此外,从:

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


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

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

NSLog(@"%lu", (unsigned long)myNSUInteger); 
除此之外,值得一提的是,你应该永远不要依赖
重新计算

此外,从:

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


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

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

NSLog(@"%lu", (unsigned long)myNSUInteger); 
除此之外,值得一提的是,你应该永远不要依赖
重新计算

此外,从:

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


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

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

NSLog(@"%lu", (unsigned long)myNSUInteger); 
除此之外,值得一提的是,你应该永远不要依赖
重新计算

此外,从:

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


永远不要使用
retainCount
-只是为了强调:永远不要使用retainCount。帮你自己一个忙,开始使用ARC。可能重复的NEVER use
retainCount
-只是为了强调:NEVER use retainCount。帮你自己一个忙,开始使用ARC。可能重复的NEVER use
retainCount
-只是为了强调:NEVER use retainCount。帮你自己一个忙,开始使用ARC。可能重复的NEVER use
retainCount
-只是为了强调:NEVER use retainCount。帮你自己一个忙,开始使用ARC