发布NSMutableString(或任何其他类)实例并在iPhone上的Objective-C中为同一个变量分配新实例的首选和/或正确方法是什么?
目前我正在使用
[current release];
current = [NSMutableString new];
但我也理解以下情况也适用。
NSMutableString *new = [NSMutableString new];
[current release];
current = [new retain];
[new release];
变量current在我的类的接口定义中声明,并在dealloc中释放。
答案 0 :(得分:0)
两个版本都应该同样有效。这意味着我会选择第一个 - 更少的代码行。
答案 1 :(得分:0)
如果您正在考虑处理实例变量,我建议使用property - 在您的类接口中声明:
// MyClass.h
@interface MyClass {
NSMutableString* current;
}
@property (nonatomic, retain) NSMutableString* current;
@end
然后让编译器自动生成具有所需内存管理行为的setter和getter方法:
// MyClass.m
@implementation MyClass
@synthesize current; // Tell compiler to generate accessor methods
...
生成的setter方法将释放先前的“当前”值并保留新值。您仍然需要在dealloc方法中释放它。
要通过属性访问变量,您应该使用.
:
self.current = [NSMutableString string];
这相当于调用[self setString:[NSMutableString string]](将自动生成setString方法)。
此外,当您在此处理可变字符串时,可能值得使用copy
属性而不是retain
。