1

私が持っているとしましょう

@interface A : NSObject
@property (nonatomic, strong) NSMutableArray *array;
@end

後で別のクラスBで、その配列にアクセスして、その中にあるアイテムの数を確認したいと思います。B私は(aのインスタンスです)で2つのことのいずれかを行うことができますA

オプション1

[a.array count]

オプション2

[[a array] count];

これを行うための最良の方法はどれですか?[a array]getterメソッドとして使用する場合、オプション2は配列にアクセスする正しい方法ですか?

4

3 に答える 3

3

アレイを合成した場合、両方とも同じです。最初の例ではプロパティを呼び出すだけで、2番目の例では@synthesizeアクションによって生成されたgetterメソッドを呼び出しています。

@synthesizeは2つのメソッドを作成するため、2番目のオプションが正しい方法であることを確認してください

1-プロパティ名と同じゲッター2-setArrayのように最初の文字がcaptialで始まるプロパティ名でセットを追加するセッター。

于 2012-05-28T15:04:32.990 に答える
1

The Saadが言ったように、アレイを合成した場合、2つの間に違いはありません。ただし、他のすべてのObjective-Cメソッド(Cの関数を除く)はブラケット構文を使用して呼び出されるため、すべてのメソッド呼び出しで一貫性を保つためにブラケット構文をお勧めします。

于 2012-05-28T17:50:55.700 に答える
0

生成されたgetter/setterメソッドの名前を変更することを決定し、メッセージが無効になる可能性があるまで、違いはありません。

パブリックインスタンス変数の場合、アクセサメソッド(プロパティスタイルとメソッドスタイルの両方)をスキップして、構造間接参照演算子を使用できます。

@interface A : NSObject
{
   NSMutableArray *array;
}

@property (nonatomic, strong) NSMutableArray *array;
@end

classA.m

[self->array count];

classB.m

[a->array count];

これを行うと、さまざまな属性を持つプロパティ(両方のアクセススタイル)を使用して、操作とメモリ管理の両方の最適化の利便性を放棄できます。詳細を参照してください

NSStringプロパティの例として

@property (readwrite, copy) NSString *sVar;

生成されたセッターは次のようになります。

-(void)setSVar:(NSString*)inSVar
{
        if (self->sVar != inSVar)
        {
                [self->sVar release];
                self->sVar = [inSVar copy];
        }
}
于 2012-05-28T15:58:37.987 に答える