【发布时间】:2012-04-20 10:13:22
【问题描述】:
假设我有这样的代码:
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 检查这个对象数?
【问题讨论】:
标签: objective-c nsautoreleasepool