2

プロパティを変数やオブジェクトに設定する実際の使用方法を理解するのに苦労しています。多くのチュートリアルとアップルのドキュメントを読もうとしましたが、プロパティを使用する理由とプロパティを合成する必要がある理由を理解できませんか? 私たちが宣言することを考えると

@property(nonatomic,retain) NSString *str;

なぜプロパティを宣言する必要があるのですか。私が理解している限りstr、クラス全体で文字列オブジェクトにアクセスできます。しかし、なぜここでプロパティを作成する必要があるのでしょうか?

誰かが私を助けてくれますか?

4

3 に答える 3

4

プロパティは通常、クラスの外部からインスタンス変数にアクセスするために使用されます。

たとえば、クラスへのポインタがある場合、次のようにプロパティを取得/設定できます

someObject.str = @"some string";

また@synthesize、通常は次のようにプロパティを指定する必要があります。

@synthesize str = _str;

そのスニペットで_strは、プロパティが設定および取得するインスタンス変数です。

プロパティは基本的に、アクセサー (セッター/ゲッター) を作成するための単なるショートカットです。

たとえば、プロパティを使用するセッターは次のようになります。

- (void)setStr:(NSString *)str {
    if(str != _str) {
        [_str release];
        _str = [str retain];
    }
}

ゲッターは次のようになります。

- (NSString *)str {
    return _str;
}

プロパティを作成すると、前の 2 つのコード ブロックが自動的に作成されます。

于 2012-04-15T17:41:42.220 に答える
1

プロパティは、変数が宣言されたオブジェクト内の変数の値を他のオブジェクトが調べて設定できるようにするパブリック インターフェイスです。

変数の値を取得および設定する明示的なメソッドを作成することで、同じことを実現できます。

実際のところ、Objective-C のプロパティと合成のペアは、コンパイラが適切に定義されたパターンを使用してこれらのメソッドを構築するための省略形であることに注意してください。

したがって、objective-c では

@property(nonatomic,retain) NSString *str;
....
synthesize str;
...

次のように定義された 2 つのメソッドを作成することになります。

void setStr:(NSString*) value;
NSString* str;

そしてその書き込み

Object.str = @"Hello world";
NSString* value = Object.str;

それぞれ次のように変換されます:

[Object setStr:@"Hello world"];
NSString* value = [Object str];
于 2012-04-15T17:40:18.023 に答える
1

プロパティの使用は、Obj-C がプログラマーに提供する機能です。

プロパティの有無にかかわらず、プログラムを作成できます。

@synthesizeプロパティは、コンパイラ ディレクティブと組み合わせて使用​​できます。

プロパティ宣言は、getter/setter ペアのメソッドを宣言するようコンパイラに指示します。セッターとゲッターを手動でコーディングする必要があります。このプロパティ宣言により、ドット表記を使用してインスタンス変数にアクセスできます。コンパイラは、ドット表記を適切な getter/setter メソッドに変換します。

ディレクティブを使用し@synthesizeて、getter/setter メソッドのコードを生成するようコンパイラに指示できます。

プロパティを使用すると、記述するコードが少なくなり、ドット表記を使用できます。プロパティを使用しない別の方法では、getter/setter メソッドを記述する必要があり、ドット表記は使用できません。

しかし、どちらの方法でもプログラムを書くことができます。したがって、プロパティを使用してそれらを合成するのはあなた次第です。

于 2012-04-16T09:37:06.533 に答える