質問

IOS6ベータ3 を使用している間にこれに気づいた

UiviewContollerの新しいサブクラスを作成するとき(他の親クラスはこの動作を生成していません).mファイルには、ファイルの上部に空のカテゴリがあります。過去にカテゴリーについて学ぶとき、私は何人かの人々がプライベートメソッドを示すために(本当にプライベートではない)を示すためにこの同じ手法を使うことに気づいた。

意図がここにいることですか?物事を実際にプライベートにするための変更はありましたか?私も@設計指令にも気づきます。

私的varsとメソッドに関するあなたの符号化スタイルは何ですか?

更新:Xcodeがクラス拡張機能を使用するようにプッシュしているので、私は先に進み、このプロジェクトのプライベートメソッド/ Ivarのためにそれらを使用しました。しかし私は欠点を見つけました。私は、そのサブクラスのUiviewControllersの1つをそのすべてのUIBUTTONS、UILABELSなどと一緒に再利用できるようになりました。 uiviewController < - FirstViewController < - SecondViewController。

まあ、私がFirstViewControllerのクラス拡張子に入れるすべてのプライベートメソッドは、SecideViewControllerにコードするときにオートコンプリートにポップアップしません。わずかな煩わしさ....

役に立ちましたか?

解決

このインタフェース定義を参照しています:

@interface MYViewController ()
@end
.

これは技術的にはカテゴリではなくクラス拡張です。カテゴリは括弧内に文字列を持っています。クラス拡張機能はコンパイル時にクラスに追加されます。そうします(通常はプロパティの形式で)Ivarsを追加できます。カテゴリは実行時に追加され、ivarsを追加できません。

言ったことは、あなたのポイントは正しいです。これはプライベートメソッドとプロパティを定義するために使用されます。

OBJCの世界では、「プライベート」は、かみそり線の壁ではなく「不法侵入」の標識です。 @privateキーワード(コンパイラの執行を追加する)がありますが、それはivarsにのみ適用され、一般的には必要ありません。このタイプの警告ベースのプライバシーは、OBJCでは非常にうまく機能し、かなり十分です。

このクラスの拡張子にあなたのプライベートプロパティを入れると、外部の発信者がアクセスしようとしている場合は「セレクタに応答しないように」警告が表示されます(未定義のメソッドを呼び出すためのものと同じ)。 OBJCプロジェクトに警告が存在することを許可する必要があるため、データのカプセル化を強化します。


編集

彼らが非公開の場合、彼らはあなたのサブクラスにポップアップしてはいけません。欲しいものは保護されています。 OBJCで保護されたメソッドのための素晴らしいスキームはありませんが、一般的なテクニックは、MyViewController + Protected.hのような.hファイル内のカテゴリにそれらをカテゴリに入れることです。私はこれが実際にはめったに起こらないのがわかりました、それほど良いOBJCデザインはサブクラスではありません。代わりに組成と委任を使います。

「コントローラを表示する理由」についてまず、それは単なるビューコントローラではありません。 iOS(Well、VC、TableviewController、およびGlkViewController)のコントローラを表示するだけです。 Macでは、ウィンドウコントローラとスポットライトインポーターもあります。見てください:

.../Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates
.../Library/Xcode/Templates
.

しかしなぜそれらがなぜですか?さて、それらはすべてのコントローラであり、コントローラには秘密の特性を必要とするのはめちゃくちゃ一般的です。実際には、コントローラにプライベートプロパティがない場合は、おそらく公開されています。モデルとビュークラスの普遍的ではありません。私は彼らの決定に演じられたと思われます。それはまたテンプレートを所有している、あるいは異なる時点で更新されたという異なる人々であったかもしれません。時々あなたは時間の経過とともに滑らかな矛盾がほとんど見られません。

あなた自身のテンプレートも同様にすることができます。 カスタムXcode 4ファイルテンプレートの作成

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top