Iphone 自动释放池难题

Iphone 自动释放池难题,iphone,objective-c,ios,ipad,Iphone,Objective C,Ios,Ipad,所以我有一个关于自动发布池的问题。我创建了一个应用程序,如下所示: dispatch_async(dispatch_get_main_queue(), ^{ NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; NSMutableAttributedString * attributedString = [NSMutableAttributedString attributedSt

所以我有一个关于自动发布池的问题。我创建了一个应用程序,如下所示:

dispatch_async(dispatch_get_main_queue(), ^{
            NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
            NSMutableAttributedString * attributedString = [NSMutableAttributedString attributedStringWithString:object.text];
            [attributedString setFont:[UIFont fontWithName:@"HelveticaNeue" size:15]];
            [self.titleLabel_ setAttributedString:attributedString];
            [self.titleLabel_ setLinkColor:self.textColor_];
            [self parseTagsInComment];
            [pool release];
        });

这是因为我已经有一个自动释放的对象而错误地使用了自动释放池吗?

是的,这是正确的。
池中的所有
自动释放的
对象
将在
[pool release]之后获得
释放
消息

因此,如果它们的保留计数变为
0
,则会从内存中刷新,就像您的情况一样
NSMutableAttributedString
,并且
UIFont
将被释放。

这可能是杀伤力过大-当处理此块的迭代中的runLoop完成时,自动释放池仍会被刷新。自动释放池很少需要,尤其是在iOS上。在OSX上,如果你正在处理大量的物品,它们可能会有用。但是,即使没有自动发布池,它们也不会自动发布吗?有什么区别?