0

Objective-C を学習するためにこのドキュメントを読んでいます : CH6-SW1

「クラス拡張を使用して個人情報を非表示にする」(pdf の 73 ページ) というトピックには、次のように書かれています。 Class extensions are often used to extend the public interface with additional private methods or properties for use within the implementation of the class itself. It’s common, for example, to define a property as readonly in the interface, but as readwrite in a class extension declared above the implementation, in order that the internal methods of the class can change the property value directly.

このステートメントで理解できないのは、クラス拡張で定義されたプライベートメソッド内から読み取り専用プロパティを変更できるため、そのプロパティをクラス拡張で読み取り書き込みとして再宣言することなく、そのプロパティを次のように再宣言することによって何が達成されるかということです。読み書き?

4

2 に答える 2

0

インスタンス変数 ( ) を使用していつでもプロパティを変更できますが、 として再宣言しない限り_ivar = ...、ドット プロパティ構文 ( ) を使用して変更することはできません。この場合、プロパティがまたはであるかどうかなどの追加情報も提供する必要があります。self.myProp =...readwritestrongweak

于 2013-07-24T08:00:43.917 に答える
0
  1. 実際、「クラス拡張で定義されたプライベート メソッド内から readonly プロパティを変更できる」という私の仮定は間違っています。クラス拡張は、特定の読み取り専用プロパティに対して自動的に合成されたインスタンス変数を使用できません。これは、デフォルトでプライベート (保護されていない) であるためです。
  2. 私が言及したドキュメントでは、特定のプロパティに対して自動的に合成されたインスタンス変数の_Make前に先頭のアンダースコア ( ) があると書かれています。実際にはそうではありません(少なくとも Xcode 4.6.3 ではそうではありません)。同じ名前が付けられ、プロパティ自体があります(インスタンス変数自体を合成しない限り、@synthesize Make = _Make; 間違っている場合は修正してください
于 2013-07-24T19:29:25.237 に答える