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.
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!
| 归档时间: |
|
| 查看次数: |
116 次 |
| 最近记录: |