0

なぜあなたは@propertyと一緒に使うのNSArrayですか?

私の質問の理由は、@properties主に を使用するときに無料で取得できるゲッターセッター@propertyを利用するために使用される印象を受けていたからですが、プロパティに を割り当てるNSArrayと、ゲッターとセッターを決して使用しないことがわかっているためです。配列内のオブジェクトにアクセスするには、この場合にプロパティを使用する必要があります。これはARCと関係がありますか?つまり、これはより良いメモリ管理方法と考えられていますか?

4

4 に答える 4

4

配列全体を取得または設定するには、プロパティを使用します。プロパティを使用して、配列の個々の要素にアクセスすることもできます。

配列でプロパティを使用することは、ARC または MRC とは関係ありません。プロパティは、データをカプセル化する方法です。それでおしまい。

配列全体へのアクセスを提供したくない場合は、プロパティを使用しないでください。必要に応じて、内部配列の個々の要素を設定/取得するメソッドを追加します。

于 2013-04-22T21:24:09.763 に答える
3

他の回答ですでに述べたことに加えて、私は通常copy、セキュリティ上の目的でアレイを使用するのが好きです。

あなたがクライアントから承認された場合、彼女はあなたにインスタンスNSArrayを提供する可能性があります. NSMutableArrayその場合、使用している配列が予期せず変更されないようにしたい場合は、それではなく、それを使用することをお勧めしcopyますretain

この場合、宣言できるため、プロパティが役立ちます

@property (nonatomic, copy) NSArray * myArray;

割り当てた後、そのアレイの唯一の所有者であることを確認してください。

私は通常、データの所有権を気にするときはいつでもNSStringNSArray、などの変更可能なサブクラスを持つクラスに対してこの戦略を使用します。NSSet

この戦略のマイナス面はもちろんメモリ効率ですが、最終的にエンジニアリングはインテリジェントな妥協の技術です。

于 2013-04-22T21:30:22.847 に答える
2

しかし、NSArray をプロパティに割り当てると、ゲッターとセッターを使用して配列内のオブジェクトにアクセスすることは決してないことがわかっているため、この場合にプロパティを使用する理由があります。

他のオブジェクトのプロパティを使用するのと同じ理由で:

  • アクセサー:アクセサーは、配列内のオブジェクトではなく、配列自体に対するものです。配列全体を一度に取得または設定することは珍しくありません。

    NSArray *kids = frank.children; // 配列を取得
    mary.children = @[@"Nick", @"Sam", @"Susan"]; // 配列を設定
  • 抽象化:基になる配列に直接アクセスする代わりにプロパティを使用すると、後で必要になった場合に実装を簡単に変更できます。

  • KVC 準拠:プロパティで無料で入手できます。配列のようなコレクションを使用すると、KVC は多くの機能を提供します。@avgおよび @のようなコレクション演算子とmax、インデックス付きアクセサーを使用できます。

    int employees = [アカウンティング countOfEmployees]; // [accounting.employees count] と同じ
    Employee * thirdEmployee = [engineering objectInEmployeesAtIndex:2]; // [engineering.employees objectAtIndex:2] と同じ
于 2013-04-22T21:51:48.450 に答える
2

単一のメソッドまたはクラスの外部で配列を使用するため。ClassA.array = ClassB.array; または、配列は実行直後に解放されるため、同じクラスの別のメソッドで配列から単純に読み取ることができます。

于 2013-04-22T21:23:42.070 に答える