Objective Cを学びながら、@propertyと@synthesizeがどのように機能するかに慣れてきました。
//usual way
@synthesize world;
しかし、最近、@synthesizeが次のようなプラクティスに出くわしました。
//new way
@synthesize world=world_;
このテクニックが使われる理由を誰かが説明してもらえますか?
ありがとう、
マーク
Objective Cを学びながら、@propertyと@synthesizeがどのように機能するかに慣れてきました。
//usual way
@synthesize world;
しかし、最近、@synthesizeが次のようなプラクティスに出くわしました。
//new way
@synthesize world=world_;
このテクニックが使われる理由を誰かが説明してもらえますか?
ありがとう、
マーク
これは、実際の ivar 名とプロパティ名の混同を避けるために使用されていると思います。あなたが持つことができるように
@interface MyClass : NSObject
{
NSObject *_myObjActualIVar;
}
@property (retain) NSObject *myObjProperty;
@end
@implementation MyClass
@synthesize myObjProperty = _myObjActualIVar;
- (void) someMethod: (NSObject *)someOtherObject
{
[_myObjActualIVar release]; // here I know I'm accessing the ivar
self.myObjProperty = someOtherObject; // here I know I'm using the setter method
//myObjProperty = someOtherObject; // if I accidentally try to do this
//self._myObjActualIVar; // or this, the compiler will tell me
}
@end
そして、実際にプロパティが必要なときに、このクラスに取り組んでいるあなたや他の開発者が誤って ivar にアクセスすること、またはその逆が難しくなります。異なる名前は、どちらがどれであるかを明確にします。
フォーム property=ivar を使用して、特定のインスタンス変数をプロパティに使用する必要があることを示すことができます。次に例を示します。
@synthesize firstName, lastName, age = yearsOld