0

これは、Apple の開発者の例からの (縮小された) クラス宣言です。

@interface myController : UITableViewController {

    NSArray *samples;
}

@property (nonatomic, retain) NSArray *samples

宣言する目的は何ですか

{

    NSArray *samples;
}

プロパティとして再度宣言するときは?省略した場合:

{

    NSArray *samples;
}

@synthesize.m で引き続き使用して、それへの参照を取得できます。

最初の宣言の目的について少し混乱しています。

ありがとう

4

2 に答える 2

3

プロパティは、データへのアクセサーを宣言する便利な方法です。通常、メンバー変数につながりますが、必ずしもそうではありません。そして、そのメンバー var は異なる名前を持つことができます:

@interface myController : UITableViewController {

    NSArray *mSamples;
}

@property (nonatomic, retain) NSArray *samples
@end

@implementation
@synthesize samples = mSamples;
@end

または、変数をまったく使用せずにプロパティを使用できます。

@interface myController : UITableViewController {

}

@property (nonatomic, retain) NSArray *samples
@end

@implementation
   -(NSArray*) samples {
    //you can for example read some array from file and return it
   }

   -(void) setSamples:(NSArray*) arr {
     //write that array to file or whatever you want
    }
@end

新しいコンパイラでは、ivar をまったく使用せずにプロパティを使用できます。コンパイラはそれらを暗黙的に生成します。

于 2012-12-07T06:03:11.820 に答える
1

プロパティ宣言では、バッキングインスタンス変数を明示的に宣言する目的や利点はありません。それは習慣からの残り物です。

編集:iOSまたはMac 64ビットIntelの場合、プロパティにivarを明示的に宣言する必要はありませんでした。しかし、それらは他のMacの作業に必要でした—したがって例です。

また、私は違いを見つけました。ivarが明示的に宣言されている場合、特に明記しない限り、それは保護されたivarであり、サブクラスで使用できます。ただし、プロパティに対してivarが暗黙的に作成される場合、サブクラスはivarにアクセスできません。

于 2012-12-07T06:02:04.080 に答える