2012-07-26 80 views
0

所以我有一个关于自动释放池的问题。我创建一个使用它如下:自动释放池dillema

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]; 
     }); 

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

+2

这可能是矫枉过正 - 当runLoop在处理此块的迭代中完成时,无论如何都会刷新autorelease池。 Autorelease池很少需要特别在iOS上。在OSX上,如果你正在处理大量的物品,他们可以使用。 – 2012-07-26 15:41:59

回答

0

是的,这是正确的。后[pool release];
因此刷新所有poolautoreleased对象将获得release消息从内存,如果他们保留计数变为0在你的情况NSMutableAttributedStringUIFont将被释放。

+0

,但即使没有自动释放池,它们也不会被自动释放吗?有什么不同? – xonegirlz 2012-07-26 16:21:40

+0

是的,当外池被释放时它们将被释放... – 2012-07-26 16:25:02