点符号dealloc?

fuz*_*oat 2 cocoa memory-management objective-c

@property (copy) NSString *name;
@property (copy) NSString *orbit;
@property (copy) NSNumber *mass;
@property float surfaceTemp;
@property float rotationSpeed;
Run Code Online (Sandbox Code Playgroud)

目前有这个

- (void)dealloc{
    [name release];
    name = nil;
    [orbit release];
    orbit = nil;
    [mass release];
    mass = nil;
    [super dealloc];
}
Run Code Online (Sandbox Code Playgroud)

如果我使用Dot Notation(Objective-C 2.0)写这个是吗?

- (void)dealloc{
    self.name = nil;
    self.orbit = nil;
    self.mass = nil;
    [super dealloc];
}
Run Code Online (Sandbox Code Playgroud)

加里

pix*_*x0r 10

使用你的setter方法是不好的做法-dealloc.请[name release]改用.

在调用setter期间-dealloc可能会产生意想不到的后果.如果使用KVO,设置属性可能会触发其他代码运行导致副作用,因为您的对象已经开始释放实例变量.即使不使用KVO,如果您的setter方法依赖于可能已经释放的其他实例变量,这可能会导致潜在的问题.

(更新以反映评论)

  • @nall如果你有其他对象使用KVO观察对该对象属性的更改,那么在dealloc中使用访问器会导致有趣的事情发生(比如观察者试图操纵部分被破坏的对象).更多信息:http://stackoverflow.com/questions/1283419 (6认同)