我遇到了Objective-C的这个片段:
NSNumber *theBalance =
[[[NSNumberFormatter alloc] init]
numberFromString: [textField text]];
这似乎泄漏了NSNumberFormatter
。在C ++中,我会做两件事之一:
auto
NSNumberFormatter
(即堆栈)存储空间
shared_ptr
)来管理NSNumberFormatter
在Objective-C中,这些选项似乎都不可能。我尝试了堆栈:
NSNumberFormatter fmt;
但是这不能编译。据我所知,Objective-C中没有与RAII直接等价的东西。我可能从错误的角度看问题是一个主要的C ++程序员,所以:
NSNumberFormatter
这样的对象的生命是什么?我真的必须自己明确地做这件事吗?答案 0 :(得分:5)
大多数类,如 NSString , NSArray 等,都有方便的构造函数,如[NSString string]
和[NSArray array]
,它们返回自动释放的对象。 NSNumberFormatter 没有任何便利构造函数。因此,您可以发送autorelease
消息,以便在自动释放池耗尽时自动释放。
NSNumber *theBalance = [[[[NSNumberFormatter alloc] init] autorelease]
numberFromString: [textField text]];
如果要保留(拥有)对象的引用,可以省略autorelease
并在完成后释放它。你这样做,
NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
NSNumber *theBalance = [numberFormatter numberFromString: [textField text]];
// Later... somewhere in your code...
[numberFormatter release];
我知道以上不是详细解释。我建议您read this post,我希望您对内存管理有一个清晰的认识!