【发布时间】:2011-09-14 06:26:00
【问题描述】:
我想知道有什么方法可以通过视图使用NSAutoreleasePool(就像我们在.h 文件和dealloc 在.m 文件的dealloc 方法中定义它们一样)。
是否可以?
【问题讨论】:
-
你在问什么?你想在你的班级中有一个
NSAutoreleasePool类型的属性/ivar吗?
标签: objective-c xcode nsautoreleasepool
我想知道有什么方法可以通过视图使用NSAutoreleasePool(就像我们在.h 文件和dealloc 在.m 文件的dealloc 方法中定义它们一样)。
是否可以?
【问题讨论】:
NSAutoreleasePool 类型的属性/ivar吗?
标签: objective-c xcode nsautoreleasepool
不,不应该这样做。
来自 Apple 的 autorelease pools 文档:
自动释放池应始终在创建它的同一上下文(例如方法或函数的调用,或循环体)中耗尽。
下一段
自动释放池“内联”使用。通常没有理由让自动释放池成为对象的实例变量。
【讨论】:
当然可以。我不确定这在您的情况下是否有意义,因此您必须对此进行分析,但如果您愿意:
在.h文件中
@interface MyView : UIView
{
NSAutoReleasePool *pool;
}
// rest of view
.m 文件中:
@implementation MyView
- (id) initXYZ // whatever initializer you have...
{
self = [super init...];
if (self)
{
pool = [[NSAutoReleasePool alloc] init];
// rest of initialization
}
return self;
}
- (void) dealloc
{
// rest of dealloc
[pool drain];
[super dealloc];
}
正如我所说,我不确定这是否有意义,除非您在视图中分配大量小对象。
【讨论】: