0

UIViewviewLoadingが.hで宣言されているとします。そして私はそれを直接初期化しません(最初のコードで)。

最初のコード。

 UIView *viewLoading2 = [[[UIView alloc] initWithFrame:CGRectMake(75 , 155, 170.0, 170.0)]];
 viewLoading = viewLoading2;
 [viewLoading2 release]

2番目のコード:

viewLoading = [[[UIView alloc] initWithFrame:CGRectMake(75 , 155, 170.0, 170.0)]];

3番目のコード:

- (void) viewLoad:(UIView *) viewLoading2
{
  viewLoading = viewLoading2;
  //do i need to retain, alloc, or release something here?

}
  1. 2最初のコードでは、deallocでviewLoadingを解放する必要がありますか?そして、私がそのプロパティを宣言しない場合はどうなりますか?

  2. 2番目のコードでは、最初のコードと同じ効果がありますか?(deallocする必要があるかどうか)。

  3. 3番目のコードについては、最初のコードと同じ効果がありますか?それをコーディングした後はどうすればよいですか?(コメントを参照)

  4. iPhoneコードは常に.hで宣言された変数のリリースを持っている必要がありますか?または、.hで宣言された変数が割り当てられている場合のみですか?最初のコードのように、viewLoadingをdeallocする必要がありますか?

  5. の違いは何ですか

    self.viewloading = viewLoading2;

viewloading = viewLoading2; 

ありがとう

4

1 に答える 1

3

最初の例では、オブジェクトを(1回)割り当て、リリース(1回)したので、他に何もする必要はありません。一方、リリースをviewLoading2に送信するとすぐに、viewLoadingは無効になるため、あまり有用なコードではありません。

2つ目は、viewLoadingをまだリリースしていないため、最終的にリリースする必要があります。

3番目では、パラメーターを介してこのメ​​ソッドに渡されたオブジェクトを割り当てたコードはすべて、それを解放する責任があります。このメソッドの期間中は有効であるはずですが、後で使用するために保存する場合は、ここに保持して、完了したら解放する必要があります。

編集:

あなたの質問を理解できるかどうかわかりません。4。インターフェイス(.h)ファイルの宣言は、ポインタ用のスペースを予約しているだけです。これはオブジェクト宣言ではないため、実際にオブジェクトの割り当てを行うまでリリースは必要ありません。

self.viewloading = viewLoading2プロパティセッターメソッドを使用して割り当てを行います。@propertyステートメントに「retain」が含まれている場合、その割り当ての一部として保持が行われます。`viewloading = viewLoading2"は単純な割り当てであり、保持されません。

于 2011-10-27T02:14:37.940 に答える