-2

私はreadonlyプロパティに頭を悩ませようとしてきましたが、自分が書いたコードにいくつかの説明を使用することができました。ヘッダーにが@property (nonatomic, readonly) BOOL test;あり、これを.mに書き込みました

-(BOOL)test{
    test = (a == b) && (b < c);
    return test;
}

if (self.test) {
    NSLog(@"a is less than c");
}
else {
    NSLog(@"a is equal or greater than c")
}

これに基づいていくつか質問があります。私がこれをコンパイルするとき、それはすでに何testが正しいかを知っていますか?[self test]私はviewDidLoadまたはinit右に書く必要はありませんか?なぜifステートメントでは、self.testテストだけでなく、そうでなければならないのですか。テストメソッドで、テストだけでなくそれ以上を返すことはできますか?テストを返し、その下に書き込み、すべてBOOLの場合は、戻ってから戻ることができますかtest1test 2

4

2 に答える 2

0
-(BOOL)test{
    test = (a == b) && (b < c);
    return test;
}

この場合testは、計算している値を保持するために使用される単なるローカル変数です。関数の外では使用されず、何と呼ばれるかは関係ありません。メソッド内で置き換えることができますが、それでも機能しtestます。foo

if (self.test) {
    NSLog(@"a is less than c");
}
else {
    NSLog(@"a is equal or greater than c")
}

この場合、はクラス内の変数ではなく、メソッドによって値が返されるプロパティであるself.testため、呼び出しています。これが、変数がないという理由testだけでなく、プロパティだけを呼び出す理由です。testtest

于 2012-09-23T16:10:46.020 に答える
0

これをコンパイルすると、どのテストが正しいかがすでにわかりますか?

さて、コンパイラはあなたがプロパティを宣言したことを知っていますtest

viewDidLoadまたはinitに[セルフテスト]を記述する必要はありませんか?

いいえ。

ifステートメントでテストだけでなくself.testである必要があるのはなぜですか?

これは、プロパティを宣言するためですtest。基盤となるivarにアクセスするに_testは、アクセサーを使用するか_test、合成した場合は直接アクセスするか、自動合成が可能なバージョンのXcodeを使用する必要があります。

テストメソッドで、テストだけでなくそれ以上を返すことはできますか?

のgetterメソッドで好きなものを返すことができますtest。もちろん、慣例により、プロパティのバッキングivarを返します。

テストを返し、その下に[sic]と書くと、test1が返され、すべてBOOLの場合はテスト2が返されますか?

いいえ、getterメソッドは宣言されたプロパティと同じ型を返す必要があります。

宣言されたプロパティ、それらの使用方法、およびインスタンス変数との関係をよく読んでおくとよいと思います。

于 2012-09-23T16:10:50.393 に答える