または、Apple がプロパティをあまり好まない場合。
本当の原因は、Foundation フレームワークのほとんど (クラスについて話していることを忘れないようにしましょうNS*
) がゴミのように古いことです。キーワードをスポーツする@property
- プロパティをエミュレートするには、プログラマーが getter メソッドと setter メソッドを手動で宣言して実装する必要があり、これは Apple のコードにも当てはまりました。
現在、Foundation フレームワークは非常に基本的なものであるため、あまり変更されていません。根本的に書き直されたわけではなく、私の知る限り、それを書いたプログラマーは、新しい構文を使用してすべてのコードを書き直す必要はありませんでした。最近追加されたクラスは、実際には getter と setter の代わりに宣言されたプロパティを備えていることがわかりますが、それは古いクラスには当てはまりません。
とにかく、手動で宣言されたプロパティと and を使用して宣言されたプロパティ@property
は@synthesize
完全に同等です。そうは言っても、それらにアクセスする際には非常に小さな違いがありますが、それは宣言に属していません:
someObject.someProperty
コードでは、someObject
は完全で具体的な型を持っている必要があるため、名前が付けられたプロパティsomeProperty
が存在しない場合は、コンパイラ エラーが発生します。対照的に、
[someObject someProperty]
と
[someObject setSomeProperty:]
宣言されていない場合でも、メソッド呼び出しを許可します。
編集:
それらの意味的な違いは何ですか
したがって、「セマンティックな違い」とは、「動作が異なるか」ではなく、「いつ使用する必要があるか」を意味していました。分かりました。ええと...概念的には、プロパティは状態を表します。プロパティは、時間の経過とともに変化するオブジェクトの特定の特性です。Objecive-C のアクセサメソッドを使用してプロパティにアクセスすることは、無関係な事実です。
オブジェクトに対して動作するメソッドを作成する場合 (もちろんプロパティの設定以外)、それをメソッドとして宣言して呼び出す必要がある可能性がかなりあります。オブジェクトの属性にアクセス (読み取りまたは書き込み) する場合、それはプロパティのタスクにより適しています。