2011-08-01 10 views
4

変数のプロパティを作成し、別のビューで使用します。同じように我々はIBOutletsのために行う。しかし、必ずしもそうではありません。私たちがxibを作成したばかりのIBOutletごとにプロパティを作成する必要がありますか?それともそれを行うのは良い習慣ですか?すべてのIBOutletにプロパティが必要ですか?

答えて

10

私はそれがメモリ管理の容易さと外部アクセスという観点から見ると好きです。外部からアクセスする必要がある場合は、明らかにプロパティを作成してください。 (はい、、メモリ管理の、それが簡単であれば、後でバグにならないようにしてください)

私のView Controllerの時間の80% IBOutletsと他の誰もそれらにアクセスしないので、ivarsが動作します。 @propertyを使用しない場合、割り当てられた値はまだ保持されます。それから、あなたはそれを自分で保持していなくてもリリースすることを覚えておく必要があります。

私は通常、私が変更しないものについては@property(代入)を使用し、他のものについては@property(retain)を使用し、IBOutletsを直接ivarsとして宣言しません。

例:

@interface something : NSObject { 
    //This one needs to be RELEASED then set to nil in both viewDidUnload, and dealloc. 
    IBOutlet UILabel * myLabel; 
    //also cannot be accessed outside of "something" class (technically it can, but don't do that) 
    //I NEVER declare my outlets this way. 
} 

//This one can just be set to nil in viewDidUnload and dealloc 
@property (nonatomic, retain) UILabel * myOtherLabel; 
//it can also be accessed from mySomething.myOtherLabel by any other class. 

//This one just works. I don't own it, the view owns it, so I don't retain/release. 
@property (nonatomic, assign) UILabel * myOtherOtherLabel; 
//It also provides access to outsiders. 
//I wouldn't recommend using this type if you want to change the value though. 
+0

それは多くのアレックスを説明します。あなたの努力をありがとう:) – Nitish

+1

素晴らしい説明、おそらく私が経験したことはありませんでしたが、言葉に入れられませんでした。 +1。 –

0

表示しようとしているものが変更されない場合は、そのウィジェットのプロパティまたはIBOutletの作成をスキップできます。

たとえば、ラベルとテキストフィールドがあり、ラベルに常に「Name:」という文字列があり、ユーザーからの入力を得るためにtextfieldが使用されている画面では、テキストフィールドの参照アウトレットユーザからのデータ入力にアクセスする。ラベルの参照元を作成することは意味をなさない。

私はあなたがポイントを得ることを願っています。

+0

値が同じビューで変更されるIBOutletのプロパティを作成すると、アプリケーションがエラーを表示しますか? – Nitish

+1

アクセスできないため、変更することはできません。 –

4

IBOutletごとにプロパティを作成する必要はありません。

具体的には、宣言されているクラスからコンセントにアクセスする場合、厳密にそのプロパティは必要ありません。プロパティを所有している場合、プロパティが提供する利点が得られますが、直接コンセントを直接参照することもできます。

別のクラスのコンセントにアクセスする予定の場合、プロパティは便利なので、セッターメソッドとゲッタメソッドを自分で定義する必要はありません。

1

XIBを作成したビューに対してのみIBOutletを使用する場合は、ここでプロパティを設定する必要はありません。しかし、はい、ビューのIBOutletを作成するたびに使用することは必須ですが、必須ではありません。

0

プロパティは、Objective-Cの機能であり、アクセサーを自動的に生成できるほか、その他のいくつかの利点があります。 Praveen SがLabelとUITextを使って例を挙げたように、ちょっと調べてみましょう。 あなたはUILabelとは何の関係もないと言っていますが、あなたは必ずしもプロパティを設定する必要はありませんが、UITextFieldに何らかのテキストを与えるように求める場合は、プロパティを設定する必要があります。 retainでプロパティを設定する場合は、viewDidUnloadでそのプロパティを解放する必要があります。

0

お使いのディスプレイの内容を変更したい場合、あなたはプロパティを追加する必要があります。..ラベルテキストを変更したい場合は、IBOutlet nd Propertyを使用する必要があります。フレームワークがペン先から作成するラベルコントロールにアクセスできるようにする必要があります。

関連する問題