释放变量并再次分配

时间:2010-06-17 07:26:00

标签: iphone objective-c

发布NSMutableString(或任何其他类)实例并在iPhone上的Objective-C中为同一个变量分配新实例的首选和/或正确方法是什么?

目前我正在使用

[current release];
current = [NSMutableString new];

但我也理解以下情况也适用。

NSMutableString *new = [NSMutableString new];
[current release];
current = [new retain];
[new release];

变量current在我的类的接口定义中声明,并在dealloc中释放。

2 个答案:

答案 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