2011-06-23 5 views
1

一般的に言えば、Objective Cの変数にはいつインスタンス変数が必要ですか?iPhone:Objective C変数をインスタンス変数にするタイミングは?

たとえば、UILabelを使用してUIViewControllerを取得したとします。どのようなケースでは、私はこのような何かをやって対インスタンス変数としてUILabelを持っているでしょう:

UILabel *label = [[UILabel alloc] init]; 
//set text of label 
[view.addSubview label]; 
[label release]; 

答えて

0

特定の例では、オブジェクトは変数として書き込まれ、ビューにそれを保持した後にreleaseメッセージを送信できるようになります。

変数なしの同等のコードは次のようになります。私たちは、オブジェクトを自動解放しているので、私たちは、リリースを送信する必要はありません

[view addSubview:[[[UILabel alloc] init] autorelease]]; 

+0

いつ実際にリリースされますか? addSubviewの実行が終了したら? –

2

あなたが任意のリソースに適度に持続的ハンドルが必要な場合は、問題のリソースが必要がある場合、あなたは、そのインスタンス変数にする必要があります少なくとも適度に持続する。

上記の例ではyesです。ラベルはインスタンス変数でなければならず、おそらくIBOutletを使用して割り当てられます。

一般に、UIKit(Foundationとは対照的に)に存在するほとんどのものは、NIBファイルを介してインスタンス化され、その後アウトレットを介してアクセスされるという利点があります。

これはパフォーマンス上の問題ではありません。また、メモリ管理と断片化だけでなく、ほとんどの場合、翻訳と国際化を単純化する必要があります。

2

具体的には、後でそのラベルにアクセスする必要がある場合(テキストを変更するなど)、ivarを維持することで、もう一度そのラベルを見つける手間を省くことができます。

一般的な理由は、永続性、範囲、利便性です。

関連する問題