这是代码。我已经使用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.
答案 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
!