我對自定義初始化方法自動釋放對象的原理有些困惑。例如:在自定義初始化方法中自動釋放
- (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