以前は、このようなプロパティと iVar の使用例を常に見てきました...
SomeClass.h の内部
@interface SomeClass : NSObject {
NSString *_someString;
}
@property NSString *someString;
@end
次に SomeClass.m で
#import "SomeClass.h"
@implementation SomeClass
@synthesize someString = _someString;
@end
最近 (WWDC 2012 のビデオで) 、 iVar を関連付けずに を@synthesize
使用することをお勧めします。@property
したがって、上記は次のように変更されます...
SomeClass.h
@interface SomeClass : NSObject
@property NSString *someString;
@end
SomeClass.m
#import "SomeClass.h"
@implementation SomeClass
@end
これは@property
ivar を使用していないだけです。これは理にかなっており、私はそれを使用しています。
しかし、私はまたの例を見てきました...
SomeClass.h
@interface SomeClass : NSObject
@end
SomeClass.m
#import "SomeClass.h"
@interface SomeClass () {
NSString *someString;
}
@end
@implementation SomeClass
@end
これには、プライベートiVar
といいえがあり@property
ます。
違いは何ですか?アクセサーメソッドも提供することは理解してい@property
ますが、アクセサーメソッドをオーバーライドする必要はありません。デフォルトのアクセサーをそのまま使用できます。
では、いつ ivar ではなく @property を使用し、いつ ivar のみを使用して を使用しないの@property
でしょうか? そして、なぜ ivar を完全に取り除き、単に使用しないの@properties
でしょうか? プライベートにする必要がある場合は、 .mのインターフェイス拡張内で使用してください。
メモリ管理に関する回答へのクイック編集。私は ARC を使用していますが、私にとっては、iVar を使用するよりも、使用strong
した方がメモリ管理をより細かく制御できるように思えます。weak
@properties
質問が十分に明確であることを願っています。
ありがとう