2012-01-02 3 views
0

UI Builderを使用してUIViewControllerで変数を宣言する場合は、特にNSObjectのキャスティングのコスト#defineを使用してiOSでキャストする場合

という変数を宣言するために、Interface BuilderとIBOutletですべてを行う傾向があります。
@property(nonatomic,retain) IBOutlet MyView *myView; 

その後、私はMYVIEW内の他のすべてのコンセントにアクセスすることができ、それはコンセントを使用して私のコードでInterface Builderのリコールの谷接続:

UILabel *label = myView.theLabel; 

MYVIEWは、私ができる、非常に頻繁に私のメインビューであることを考慮すると、また:

UILabel *label = (MyView*)self.view.theLabel; 

構文は非常に長いですが、これは、マクロで例えば、これはなる可能性があり、私は.hファイルに以下の変数を宣言し、(私の意見で)コードクリーナーを維持することができます:

#define MV (MyView*)self.view 

UILabel *label = MV.theLabel; 

私は読んで維持する方がはるかにいいと分かった。 重要なことは、iOS 5を使用してパフォーマンスの面でコストが常にかかることです。 UIKitがもう何かの上のレイヤーであると考えると、UIViewオブジェクトのキャスティングは多少異なるか、またはより高価になりますか? コンパイラは、特に新しいアークコンパイラで何らかの最適化を行いますか?

おかげ

答えて

0

キャストは、コンパイル時に起こり、そのように全く実行時のコストを持っています。

サイドバー:それはあなたのために働くかどうかを定義を使用するこの方法では、まだ、あやふやビットとして私を打つ、ちょっと...

編集:あなたが記述している問題は、目的をconflatingの結果でありますあなたのコードのクラスのうち、MyViewは話すアウトレットを持つ必要はありません。そのジャズのすべてを記録しておくことは、View Controllerの仕事です。

つまり、あなたはおそらく望んでいませんself.view.label;むしろself.relevantNameForTheLabelです。

+0

えええええええと、私はいつも他の意見に興味があります。特に、プログラミング言語を初めて勉強した時には、このアプローチの他の欠点について説明できますか?たぶんあなたの答えに。 – Leonardo

+0

@レオナルド:あなたのコードをもっと見ることなく、最高の状態で編集できます。 –

+0

おかげで、私が調査しようとしている興味深い側面を指摘しました。 – Leonardo

関連する問題