私が読んできたチュートリアルのほとんどに、カスタムinitメソッドを持つクラスの例があります。今、例えば作成されていない可能性のあるオブジェクトを解放する
@implementation MyPerson
-(id) initWithDefaultName {
self = [super init];
if (self) {
NSString *name = [[NSString alloc] initWithString:@"John Doe"];
}
return self;
}
私ならば、これはクラッシュしないだろう、なぜ、私は私が
-(void) dealloc
{
[name release];
[super dealloc];
}
でこれをペアリングすることになっていますことを知って、私はしかし、理解していない何か、です[MyPerson init]
の後に[MyPerson release]
EDIT:下記のコメントを読んで、上記の例のコードが正しくないとわかりました。私が得意とするのは、私のカスタムinitWithName
メソッドは、標準のinit
メソッドが呼び出された場合には存在しないオブジェクトを割り当てて初期化することです。だから私のdealloc
メソッドは、それを解放するコードが含まれていますが、これはまだ名前オブジェクトが作成されたことがない場合でも動作しますか?
:: 'name'のは**にリリースされることはありません
のみリターンレジスタに収まらないような構造体としての戻り値の型のためにあなたが定義された戻り値を取得することはありません
'dealloc'は' name'インスタンス変数ではなく、ローカル変数に代入しているからです。 initメソッドのこのステートメントは、おそらく 'name = [[NSString alloc] initWithString:@" John Doe "];'だけを読み込んで、あなたの望む効果を得ているはずです。 – PeyloW