好的,发布指针为零?

时间:2009-10-01 12:31:56

标签: objective-c cocoa

如果我在创建对象时创建一个包含两个对象指针(见下文)的新对象,则将指针设置为指向nil;

@interface rocketShip : NSObject {
    NSString *name; 
    NSNumber *thrust;
}

如果(由于某些意外的原因)我没有分配这些指针,后来在我的dealloc方法中释放它们就好了,我很确定它是,只是想检查一下?

- (void)dealloc{
    [name release];
    name = nil;
    [thrust release];
    thrust = nil;
    [super dealloc];
}

加里

4 个答案:

答案 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的消息什么都不做(通常是安全的)。