可能性の重複する前に、なぜ "_" アンダースコアを置く:客観CIで
How does an underscore in front of a variable in a cocoa objective-c class work?Objective Cの中の変数名
は、例えば_someVariable
変数名の前にアンダースコアを使用してコードの多くを見ていますなぜですか?どのようにしてアクセッサを書くか、つまりそのような変数のメソッドを取得して設定する方法もあります。
可能性の重複する前に、なぜ "_" アンダースコアを置く:客観CIで
How does an underscore in front of a variable in a cocoa objective-c class work?Objective Cの中の変数名
は、例えば_someVariable
変数名の前にアンダースコアを使用してコードの多くを見ていますなぜですか?どのようにしてアクセッサを書くか、つまりそのような変数のメソッドを取得して設定する方法もあります。
変数がのインスタンス変数であることを示すためにアンダースコアがよく使用されます。 ivarsは、プロパティとそのアクセサと同じ名前を持つことができるため、実際には必要ありません。
例:
@interface MyClass : NSObject {
NSString *_myIVar; // can be omitted, see rest of text
}
// accessors, first one is getter, second one is setter
- (NSString *) myIVar; // can be omitted, see rest of text
- (void) setMyIVar: (NSString *) value; // can be omitted, see rest of text
// other methods
@property (nonatomic, copy) NSString *myIVar;
@end
さて、代わりにアクセサmyIVar
とsetMyIVar:
自分自身を宣言し、コーディングの、あなたはコンパイラがそれをやらせることができます。新しいバージョンでは、インターフェイスにmyIVar
を宣言する必要はありません。プロパティを宣言し、コンパイラに残りの部分を合成させます。 .m
ファイルでは、実行します。あなたはゲッターやセッターのデフォルトの実装以上のことを行いたい場合は、
- (void) dealloc {
[myIVar release];
[super dealloc];
}
FWIWあなたがすることができます
@implementation MyClass
@synthesize myIVar; // generates methods myIVar and setMyIVar: for you,
// with proper code.
// also generates the instance variable myIVar
// etc...
@end
文字列を確定してくださいそれらの一方または両方をあなた自身がまだコードしていますが、メモリ管理の面倒を見なければなりません。その場合、コンパイラはその特定のアクセサをもう生成しません(ただし、一方のみを手動で実行すると、もう一方は引き続き生成されます)。
あなたは
myString = self.myIVar;
または、別のクラスからなどのプロパティにアクセスする:あなたはself.
を省略した場合はMyClassで
theString = otherClass.myIVar;
と
otherClass.myIVar = @"Hello, world!";
、あなたは裸を取得ivar。これは一般に初期化子とdeallocでのみ使用されます。
例が正確に私が見ていたものなので、素晴らしいexaplainationと受け入れていただきありがとうございます。 –
しないでください。
単一の先頭のアンダースコアは、アップルの内部コード規約です。彼らはあなたのivarの名前があなたと衝突しないようにそれを行います。 ivarの名前に接頭辞を使用する場合は、以外にはの1つのアンダースコアを使用します。
このクラスではuが、これは命名規則で
private:
int __x;
public:
int GetX()
{
return this.__x;
}
を有することができるようにプライベート
であるインスタンス変数を定義する++、通常のCのために使用される命名規則で、私は中に使用することを余儀なくされましたC++。しかし私の先生は命名規則の名前を教えてくれませんでした。しかし、私はこれが有用であり、特にJava命名規約を使用していないときには読みやすいと感じています。
upvoting私は標準の命名規則のすべての種類に精通しなければならないと感じているので。 – amod