我经常看到在释放一个对象时,我们会立即将其设置为nil。我知道release和nil都可以释放与对象相关联的旧值,但是在release的情况下,它会使对象成为悬空指针,因此我们必须将其设置为nil。
那么我的问题是,如果nil可以释放对象的旧值并将对象设置为nil,为什么我们不仅使用nil而要使用release呢。
方法1:
MyClass *obj = [[MyClass alloc] init];
[obj release];
obj = nil;
方法2:
MyClass *obj = [[MyClass alloc] init];
obj = nil;
如果使用way1,与使用way2相比有什么真正的区别?为什么不只使用way2呢?
@property (retain)
,并且您已经使用@synthesized
合成了访问器,那么这些访问器方法将负责保留和释放您分配给它们的对象。当然,这仅适用于您使用访问器方法时:[self setObj:nil]
或self.obj = nil
(在 objc-2.0 中)。 - mbauman