2012-02-01 12 views
0

ボタンを作成するには2つの方法があります。ボタンをプログラムで作成する

UIButton *button = [[UIButton alloc]initWithFrame:CGRectMake(10, 220, 150, 30)]; 

UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 

最初のケースは、ボタンオブジェクトを作成するための通常の方法です。私はボタンのインスタンスを割り当てて初期化しました。私はそれを解放しなければなりません。私は第二の方法について本当に混乱しています。私はこれに関するいくつかの質問があります。

  1. この場合、ボタンインスタンスが作成されますか?
  2. このボタンの保持カウントとは何ですか?
  3. このボタンを放すべきですか?
+0

retainCountは役に立たない。それを呼び出したり、戻り値を解釈しようとしたりしないでください。 – bbum

答えて

7

・ホープ、このことができます:

  1. はいボタンインスタンスが作成されます。
  2. 保持回数はどのように追加/保持されますか。
  3. allocで作成していない場合は、ボタンを解放する必要はありません。
2

この場合、ボタンインスタンスが作成されますか?

はい、インスタンスが作成されます。

このボタンの保持カウントとは何ですか?

保持カウントはおそらく1です。それ以外の場合、ライフサイクルはそれを取り除きます。

このボタンを解除する必要がありますか?

いいえ、あなたはオブジェクトがオートリリースされるべきではありません。

1

から:http://cocoadevcentral.com/d/learn_objectivec/ローカルメモリ管理に関する

1つのルールだけあります:あなたはアロケーションまたはコピーを持つオブジェクトを作成した場合、それを関数の最後のリリースまたはautoreleaseのメッセージを送信するには。他の方法でオブジェクトを作成する場合は、何もしないでください。あなたがそれを保持して呼び出すことはありません提供

  1. 機能が終了したときにはいローカルインスタンスが
  2. 1に作成されますが、機能は
  3. を終了したときに0になりません、オブジェクトは解放のためにマークされます。
+0

という定義では、retainCountをゼロにすることはできません。慣例により、絶対retainCountは無意味です。 – bbum

0

1)はいボタンインスタンスは

2に作成され、あなたがそれを割り当てるかどうか、どちらの場合も、ボタンインスタンス工場method.Inを使用して作成されます。)現在の実行ループ/サイクルで保持カウントが1になり、次のループでオブジェクトが自動的に解放されます。したがって、retainCountは0になります(注:NSCのretainCountが0の場合、アプリケーションはクラッシュします)

3.ファクトリメソッドで作成されたボタンを解放する必要はありません。

+0

という定義では、retainCountをゼロにすることはできません。慣例により、絶対retainCountは無意味です。このボタンは、OPのコード行の1つに少なくとも1回だけオートリリースされます。 – bbum

関連する問題