1

由于某种原因我不能使用arc,所以在我下面的代码中..

Foo.h

@interface Foo : NSObject

@property (nonatomic, copy) NSString * string;

@end

Foo.m

@implementation Foo

@synthesize string=_string;

- (void) bar {
    self.string = [NSString stringWithFormat:@"test1"];
    self.string = [NSString stringWithFormat:@"test2"];
}

-(void) dealloc
{
    [_string release];

    [super dealloc];
}
@end

bar方法可能并不总是被调用,或者它们可以被多次调用。

只需要一个releasedealloc

4

2 回答 2

2

是否只需要 dealloc 中的一个版本?

是的。

说明:setter 方法释放分配给属性的旧对象并保留新对象。

于 2012-12-06T16:29:29.110 回答
2

是的,因为您使用的是属性,所以 setter 方法将负责释放内存分配。它将按如下方式分配内存:

-(void)setValue:(NSString *)strValue
{
   if(string)
   {
     [string release];
     string = nil;
   }
   string = [strValue copy];
}
于 2012-12-06T16:31:48.103 回答