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