4

私はObjective-Cが初めてで、頭を包むために多くの例を調べています。私はこのコードに出くわしました:

@interface ImagePickerHelper : NSObject <UIImagePickerControllerDelegate, UIPopoverControllerDelegate, UINavigationControllerDelegate>
  //Blah Blah
@end

@interface ImagePickerHelper ()
  //Blah Blah
@end

グーグルで調べたところ、インターフェイス名の後にスーパークラスとデリゲート (ちなみに、これについては zilch を知っています) が指定されていることがわかりました。

しかし、ここでインターフェイスが 2 回宣言されているのはなぜでしょうか。

4

2 に答える 2

3

いいえ、2回宣言されているわけではありません。クラス内でプライベートに保ちたいメソッドを保持するために作成されたクラスインターフェイス(匿名カテゴリ)であり、他のクラスに見せたくないメソッドのために作成されます。関わる ..

プライベート メソッドを保持するために名前 (通常は「プライベート」) を持つ標準カテゴリを宣言することがよくありますが、名前 付きカテゴリよりも匿名カテゴリを使用する主な利点は、匿名で宣言されたメソッドを実装しないとコンパイラが文句を言うことです。カテゴリー。

XCode 4.3 以降からデフォルトで作成されることに気付きました。

メソッドをこの拡張クラスに入れることは、Java や C++ でプライベート メソッドを宣言するようなものです ...

于 2012-06-03T22:02:22.873 に答える
2

2 番目に表示される「@interface」(おそらく .m ファイル内) はクラス拡張であり、おそらくプライベート メソッドを意味します (コンパイラが「応答しない可能性がある」という警告を生成するという意味でプライベートです)。

于 2012-06-03T21:57:18.060 に答える