如果我使用NSAutoreleasePool,池中创建的每一个对象都不应该被手动释放?当池被耗尽时,它将被释放?
- (void) backgroundRequest{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
urlList = [[NSMutableArray alloc] init];
target = [[NSMutableArray alloc] init];
{
//do stuff in here
}
[urlList release];
[target release];
[pool release];
}上面的行是正确的还是我应该删除[urlList release]和[target release]?重要:我将等待一个解释和一个answer.Thank你
发布于 2011-11-23 07:49:49
只有当有使用自动释放方法的对象时,才能使用自动释放池。
如果你用这个:
urlList = [[NSMutableArray alloc] init];然后你会想做你自己的发行,是的。但是,如果您这样做:
urlList = [[[NSMutableArray alloc] init] autorelease];然后,您可以让NSAutorelease池处理这个问题。
发布于 2011-11-25 12:22:46
如果不想发布urlList和target,那么可以使用以下代码:
- (void) backgroundRequest
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
urlList = [[[NSMutableArray alloc] init] autorelease];
target = [[[NSMutableArray alloc] init] autorelease];
{
//do stuff in here
}
[pool release];
}希望这能帮到你。
关键是,AutoreleasePool负责那些已经用关键字autorelease自动释放的分配,所以如果使用该关键字,就不需要释放它。它是在AutoreleasePool发布时发布的。
如果您需要更多的信息,请留言给我。
https://stackoverflow.com/questions/8238717
复制相似问题