36

MyClass.m ファイルでプライベート インスタンス変数を定義したいと考えています。それを行うには2つの方法があるようです:

  1. クラス拡張を使用する

    @interface HelloViewController ()
    {
         int value;
    }
    
  2. @implementation セクションで定義

    @implementation HelloViewController
    {
        int value;
    }
    

どちらが良いですか?

最近の Apple のコーディング スタイルは、クラス拡張を使用することだと思いますか?

例: 「Master-Detail Application Template」によって生成された MasterViewController.m

@interface MasterViewController () {
    NSMutableArray *_objects;
}
@end
4

3 に答える 3

56

これを行う「最新の Objective-C」の方法は、次のように実装ブロックで宣言することです。

@implementation ClassName {
    int privateInteger;
    MyObject *privateObject;
}

// method implementations etc...

@end

詳細については、私のこの以前の投稿を参照してください。

于 2012-11-23T16:46:13.960 に答える
8
@interface HelloViewController ()
{
    @private     //optional, this is old style
    int vale;
}

ただし、ライブラリを作成している場合、理論的には、ヘッダー ファイルで宣言していないメソッドについては誰も知りません。

コピー元:実際のプライベートインスタンス変数を作成するには?


@implementation でのインスタンス変数の宣言は、Obj-C の最近の機能です。これが、@interface でインスタンス変数を含む多くのコードを目にする理由です。他に選択肢はありませんでした。

インスタンス変数を宣言する実装での宣言をサポートするコンパイラを使用している場合、おそらく最良のデフォルトがあります-他の人がアクセスする必要がある場合にのみ、それらをインターフェースに入れます。

実装で宣言されたインスタンス変数は暗黙的に非表示 (事実上プライベート) であり、可視性を変更することはできません。@public、@protected、および @private は (少なくとも現在の Clang では) コンパイラ エラーを生成しませんが、無視されます。

コピー元: @interface または @implementation のプライベート ivar

于 2012-11-23T16:43:26.263 に答える