为什么retainCount是0而不是1?

say*_*lim 0 iphone memory-management objective-c

这是代码.我已经使用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]);
Run Code Online (Sandbox Code Playgroud)

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

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

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

Dav*_*har 7

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

B)这个:

for(items in items)
Run Code Online (Sandbox Code Playgroud)

几乎肯定不是你的意思 - 你也使用数组对象("items")作为迭代器!就像是:

for(Possession *item in items) 
Run Code Online (Sandbox Code Playgroud)

会更有意义.


更新:

您可能希望查看Apple 关于快速枚举文档中的一些示例.你真的想要一个单独的变量充当你的循环迭代器.你正在做什么(for(items in items))items依次设置数组中的每个对象,当你退出循环时,items将是nil!