2011-06-29 10 views
1

私はiOS開発の初心者です。いくつかのチュートリアルや、クラスのサブクラス化の際にXcodeがコードを自動生成する際に、私は次のことを見てきました。Cocoaクラスの変数宣言の相違点

#import <UIKit/UIKit.h> 

@interface Class : NSObject { 
    NSArray *infos; 
    NSString *context; 
} 

@property (nonatomic, retain) NSArray *infos; 
@property (nonatomic, retain) NSString *context; 

@end 

#import "Class.h" 

@implementation Class 

@synthesize infos; 
@synthesize context; 

@end 

違いは何ですか:のは、私は次の.hと.mファイルのファイル

#import <UIKit/UIKit.h> 

@interface Class : NSObject { 
    NSArray *_infos; 
    NSString *_context; 
} 

@property (nonatomic, retain) NSArray *infos; 
@property (nonatomic, retain) NSString *context; 

@end 

#import "Class.h" 

@implementation Class 

@synthesize infos = _infos; 
@synthesize context = _context; 

@end 

を持っている。そして、私は通常、それを行うだろうかであるこのことを検討しましょうか?表記法から、変数を私的なものとして宣言しているだけだと推測できますが、どのように機能しますか?私が正しいならば。

答えて

4

これは愚かな命名規則です。あなたがしたい場合はそれを使用し、そうでない場合はそのままにしておきます。

利点は、メソッド引数/ローカル変数contextがivar _contextと競合しないことです。イーバスをプライベートにするために@privateを指定することができるので、プライバシとはほとんど関係がありません(最初は@synthesizeです)。

欠点は、あなたが持っていることはどこにでもアンダーで、小文字に続いてアンダースコアは、ファイルの有効範囲のみに予約されているものの、アンダースコアは(Cで時折少し特殊ですので、あなたは細かいIVARで始まる提供されるべきです小文字...)。必要に応じて、私はエンドに下線を引いて、汚れが少なく感じます。

追記:少数の人々が「プライベート」を意味するために、アンダースコアで始まる方法名を使用しますが、この大会がreserved by Appleです。

0

唯一の違いは、プロパティを保持するivars(「インスタンス変数」)の名前だけです。