我遇到了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
这样的对象生命的正确,惯用(现代)Objective-C方法是什么?我真的必须自己明确地做吗? 最佳答案
大多数类(如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,希望通过它可以对内存管理有个清晰的了解!
关于iphone - 惯用生命周期短的局部物体,类似于RAII,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7753680/