假设我有这样的代码:
NSAutoreleasePool* pool=[[NSAutoreleasePool alloc]init];
for(unsigned int i=0;i<10;i++)
{
NSDate* date=[[NSDate alloc]init];
}
[pool drain];
请注意,此代码仅用于显示我可以做什么,它是对我通常做的事情的简化。因此,在每次迭代中,都会分配并初始化一个新的 NSDate。NSAutoreleasePool 是否将它们全部耗尽,或者我是否必须以这种方式在循环中添加 NSAutoreleasePool:
for(unsigned int i=0;i<10;i++)
{
NSAutoreleasePool* pool=[[NSAutoreleasePool alloc]init];
NSDate* date=[[NSDate alloc]init];
[pool drain];
}
?
另外,我的书(mac os x 的可可编程)没有提到 NSAutoreleasePool,它只是这样使用它:
@autoreleasepool
{
<code>
}
我已经读到这种方式比使用 NSAutoreleasePool 更有效,但是如果我使用它,我会收到一个语法错误:
“程序中出现意外的 '@'”
为什么会这样?
我试过这样修改代码:
NSAutoreleasePool* pool=[[NSAutoreleasePool alloc]init];
for(unsigned int i=0;i<10;i++)
{
NSDate* date=[[NSDate alloc]init];
[date autorelease];
}
[pool drain];
那是对的吗?我认为保留了 10 个不同的对象(计数为 1),然后添加到自动释放池中。我没有内存泄漏吗?有没有办法用 gdb 检查这个对象计数?