私はUIView viewLoadingが.hで宣言されていると仮定します。私はそれを直接初期化しません(最初のコードで)。メモリ管理直接割り当てなしで割り当てる
最初のコード。
UIView *viewLoading2 = [[[UIView alloc] initWithFrame:CGRectMake(75 , 155, 170.0, 170.0)]];
viewLoading = viewLoading2;
[viewLoading2 release]
二コード:
viewLoading = [[[UIView alloc] initWithFrame:CGRectMake(75 , 155, 170.0, 170.0)]];
第三コード:最初のコード2本体
- (void) viewLoad:(UIView *) viewLoading2
{
viewLoading = viewLoading2;
//do i need to retain, alloc, or release something here?
}
、私はのdeallocでviewLoadingを解放する必要がありますか?私はその財産を宣言しなければ何が起こるでしょうか?
2番目のコードでは、最初のコードと同じ効果がありますか? (解除する必要があるかどうか)。
3番目のコードについては、最初のコードと同じ効果がありますか?私はそれをコードした後に何をすべきですか? (コメントを参照)
iPhoneコードは、常に.hで宣言された変数のリリースが必要ですか?または、.hで宣言された変数が割り当てられている場合のみです。最初のコードのような場合、私はviewLoadingをdeallocする必要がありますか?
self.viewloading = viewLoading2間で異なるもの
。最初の例で
と
viewloading = viewLoading2;
おかげ
こんにちは、最初のコードでは、無効かどうかは、"あなたがreleeをviewLoading2に送信するとすぐに非常に有用ではないコード "です。viewLoading2はviewLoadingによって保持されませんか? viewLoadingのリリースを行う必要がありますか? 2番目のコードでは、リリースをdeallocのままにしてもかまいませんか? –
私も自分の質問を編集しました。おそらくあなたもそれに答えることができます:D –
私はコード1への私の答えを明確にしましょう。それは有効な構文であり、メモリリークはありませんが、viewLoadingはすでにリリースされているオブジェクトを指しているので、代入文で行ったことは、両方のポインタが同じオブジェクトを指し示して、それを解放したことだけでした。だから、彼らはもはや有効なオブジェクトを持っていないメモリの場所を指しています。 – Flyingdiver