【发布时间】:2011-06-27 17:04:13
【问题描述】:
情况是这样的。假设我有一个名为 MYFoo 的类。这是它的初始化程序:
-init
{
self = [super init];
if (self)
{
// during initialization, something goes wrong and an exception is raised
[NSException raise ...];
}
return self;
}
现在我想在其他地方使用 MYFoo 对象,所以我使用了一个通用模式:
MYFoo *foo = [[[MYFoo alloc] init] autorelease];
但是将会发生的是,即使在第二部分有一个 try/catch,一个 MYFoo 对象也将被分配,异常将被抛出,自动释放丢失,未初始化的 MYFoo 对象将泄漏。
这里应该怎么做才能防止这种泄漏?
【问题讨论】:
-
很难说,但我认为您不应该以这种方式使用异常。在 Cocoa 中,您只对程序员错误使用异常——很少需要从异常中恢复,尤其是在对象初始化期间。初始化通常应该成功或返回
nil。尝试将您的危险操作放在不同的方法中,并结合使用信号和NSError来处理失败。
标签: objective-c memory-management memory-leaks