我对自定义初始化方法自动释放对象的原理有些困惑。例如:在自定义初始化方法中自动释放
- (id)initWithId: (unsigned long)personID {
self = [super init];
if (self) {
self.ID = personID;
}
return self;
}
根据objc编码约定,我必须在返回时自动释放自我。但是那种代码不断破碎。我错过了什么吗?我应该自动释放这些方法手动创建的对象,但不是“自己”,像这样?
- (id)makeWithId: (unsigned long)personID {
Person *obj = [[Person init] alloc];
if (obj) {
obj.ID = personID;
}
return [obj autorelease];
}
在此先感谢。
你是否坚持在调用代码中返回的对象? – Abizern 2011-12-26 16:55:24
这没关系=)这都是关于autorelease的原理。我的意思是:如果我调用'SomeClass sc = [SomeClass alloc] init];'我在使用它后肯定会释放sc。但如果我调用'SomeClass sc = [[SomeClass alloc] initWithSomeParam:123]'我不需要释放它,我不负责它(initWithSomeParam是)。 – Stormherz 2011-12-26 17:06:47
@Stormherz,你错了。如果你调用了'alloc',你有责任释放它。如果你已经调用过'[SomeClass someClassWithSomeParam:5]',那么你不需要负责它,它是自动释放的。 – joerick 2011-12-26 17:11:12