私は、カスタムinitメソッドからオブジェクトをオートリリースする原理について少し混乱しています。例:カスタムinitメソッドでの自動解放
- (id)initWithId: (unsigned long)personID {
self = [super init];
if (self) {
self.ID = personID;
}
return self;
}
objcコーディング規則に従って、返品時に自己を自己引き出しする必要があります。しかし、その種のコードは崩壊し続ける。私は何かを逃していますか?私はこれらのメソッドで手作業で作成したオブジェクトだけを自動リリースすべきですか? "self"ではなく、このようにしますか?
- (id)makeWithId: (unsigned long)personID {
Person *obj = [[Person init] alloc];
if (obj) {
obj.ID = personID;
}
return [obj autorelease];
}
ありがとうございます。ココアで
呼び出しコードで返されているオブジェクトを保持していますか? – Abizern
それは関係ありません=)それはすべてオートリリースの原則です。私が言っていることは: 'SomeClass sc = [SomeClass alloc] init];を呼び出すと、'私は間違いなく使用した後にscをリリースします。しかし、私が 'SomeClass sc = [[SomeClass alloc] initWithSomeParam:123]を呼び出すと、'私はそれを解放する必要はなく、私はそれに責任がない(initWithSomeParamは)。 – Stormherz
@Stormherz、あなたは間違っています。あなたが 'alloc'を呼び出したならば、それを解放する責任があります。もしあなたが '[SomeClass someClassWithSomeParam:5]'を呼んでいれば、それはあなたの責任ではなく、オートリリースされています。 – joerick