属性の裏と外を徹底的に理解する

819 ワード

プロパティとインスタンス変数が異なります.下線で始まる変数は属性ではなく、合成のインスタンス変数と呼ばれるものです.局所変数と区別する役割を果たします.プロパティは、インスタンス変数によって実装され、コンパイラによって合成されます.プロパティと合成インスタンス変数は、インスタンス変数によって実装されるため、両方ともインスタンス変数にアクセスできます.
通常、合成されたインスタンス変数を使用するのは属性を使用することだと思いますが、そうではありません.アクセスプロパティには、self.propertyという点構文が必要です.このように書くと、属性のaccessorが自動的に呼び出されます.
合成インスタンス変数の名前は変更可能であり,必ずしも以下の線で始まるものではない.次のようになります.
@interface ViewController ()
@property (strong, nonatomic) NSString *someString;
@end

@implementation ViewController
@synthesize someString = otherString;
@end

動的プロパティとは、@dynamicキーワードを使用します.静的@synthesizeプロパティに対して、実行時にaccessorを生成できます.しかし、作者が出したコードは少し多いですが、どうせプログラムで@dynamicを使っているのを見たことがありません.私が使ったときに話しましょう.一応覚えておきます.
属性を変更するには、拡張によって変更できます.クラス拡張は、実は.mでプライベート属性を宣言する場所です.しかし、このような修正には限界があり、すなわち、拡張された実装にのみ有効である.個人的には面白くないと思います.