如果我在创建对象时创建一个包含两个对象指针(见下文)的新对象,则将指针设置为指向nil;
@interface rocketShip : NSObject {
NSString *name;
NSNumber *thrust;
}
如果(由于某些意外的原因)我没有分配这些指针,后来在我的dealloc方法中释放它们就好了,我很确定它是,只是想检查一下?
- (void)dealloc{
[name release];
name = nil;
[thrust release];
thrust = nil;
[super dealloc];
}
加里
答案 0 :(得分:22)
向nil发送消息不会导致错误,所以这很好。你需要确保指针实际上是零 - 向垃圾指针发送消息可能会导致错误。
答案 1 :(得分:7)
是的,您可以这样做,因为您可以安全地向release
发送消息(例如nil
),它将无所作为。
答案 2 :(得分:1)
如果使用accessor属性创建get / set方法:
@interface rocketShip : NSObject {
NSString *name;
NSNumber *thrust;
}
@property (retain, nonatomic) NSString *name;
@property (retain, nonatomic) NSNumber *thrust;
在你的.m文件中:
@synthesize name;
@synthesize thrust;
然后,您可以在dealloc中将变量设置为nil。这实际上会调用你的setter并将引用计数减1并清理。
答案 3 :(得分:0)
在Objective-C中区分对象和变量很重要。您不能释放指针(变量的值),您只能释放一个对象(指针引用的对象)。 nil指针指的是没有对象,因此发送给nil的消息什么都不做(通常是安全的)。