为什么retainCount是0而不是1?

时间:2011-03-09 03:38:37

标签: iphone objective-c memory-management

这是代码。我已经使用NSString进行了测试,它返回-1。但是对于NSMutableArray而言是0。

NSMutableArray *items = [[NSMutableArray alloc] init];

for(int i=0;i<10;i++)
{
    [items addObject:[Possession randomPossession]];
}

/*for(int i=0;i<[items count];i++)
{
    NSLog(@"%@", [items objectAtIndex:i]);
}*/



//Using Fast Enumeration
/*for(items in items)
{
    NSLog(@"%@", items);
}*/


NSLog(@"%d", [items retainCount]);

我在迭代中使用数组犯了错误。正确的应该是这样的。

//Using Fast Enumeration
    for(Possession *item in items)
    {
        NSLog(@"%@", item);
    }

并且retainCount按预期恢复正常1.

1 个答案:

答案 0 :(得分:7)

A)你永远不应该看retainCount,即使是调试。这是一个内部实现细节,可以提供令人困惑的结果。

B)这:

for(items in items)

几乎可以肯定不是你的意思 - 你也使用数组对象(“items”)作为迭代器!类似的东西:

for(Possession *item in items) 

会更有意义。


更新

您可能希望查看Apple documentation on fast enumeration中的一些示例。你真的想要一个单独的变量充当你的循环迭代器。您正在做的事情(for(items in items))依次为数组中的每个对象设置items,当您退出循环时,items将为nil