1

次のコードを検討してください。

@interface TestClass ()

@property NSString *privateProperty;

@end

さて、私が学んだように、コンパイラーにアクセサーも作成させるには、@implement-partに@synthesizeディレクティブを追加する必要があります。

ただし、ディレクティブを追加しない場合は、次のメッセージが機能します。

[self setPrivateProperty:@"foo"];

私の理解では、これはセレクターが不明であるという私を説明するエラーにつながるはずです。なぜこのセッター(そして私はゲッターも)がまだ存在しているのですか?

4

3 に答える 3

2

xcode 4.5以降、すべてのプロパティは自動的に合成されます。

于 2012-12-23T17:49:25.710 に答える
1

@property宣言は、getterメソッドとsetterメソッドの存在を宣言します。@synthesize宣言は、これらのメソッドの実装を作成します。

Xcode 4.5より前では、を省略したことに対するコンパイラの警告@synthesizeと実行時のクラッシュが発生していました。どちらも、暗黙的に宣言したメソッドの実装がないことが原因です。

Xcode 4.5以降、特に指定しない限り、メソッドの実装は自動的に合成されます(@dynamic)。

于 2012-12-23T17:56:57.670 に答える
0

これは、XCodeの最近のバージョンで導入された新機能です。プロパティを自動シンテットし、それを格納するための_propertyNameivarを作成します。

于 2012-12-23T17:49:40.190 に答える