セッターとゲッターが自動的に作成されることはわかっていますが、セッターが実際にどのように「見える」かはわかりません。
@synthesize someObject = _someObject;
また、単に の代わりに言うことが推奨されるのはなぜ@synthesize someObject;
ですか?
セッターとゲッターが自動的に作成されることはわかっていますが、セッターが実際にどのように「見える」かはわかりません。
@synthesize someObject = _someObject;
また、単に の代わりに言うことが推奨されるのはなぜ@synthesize someObject;
ですか?
最初に簡単に説明します。もう必要ありません@synthesize
。があり、@property
それを合成しない場合は、フォームの が暗示され@synthesize someObject = _someObject;
ます。を省略した場合= _someObject
は、 と同じになります@synthesize someObject = someObject;
。したがって、アンダースコア バージョンが推奨されます。Apple がインスタンス変数にアンダースコアを推奨する方向に戻ったことと、暗黙の型の合成と一貫性があるためです。
setter と getter の正確な形式はatomic
、strong
、unsafe_unretained
、 などのフラグによって異なりますが、サンプルの非アトミックな強力な setter、プレ ARC は次のとおりです。
- (void)setProperty:(NSString *)newPropertyValue
{
[newPropertyValue retain];
[_property release];
_property = newPropertyValue;
}
保持は常にリリース前に行われることに注意してください。それ以外の場合は、次のようになります (直接書くのではなく、回りくどい方法で到達します)。
self.property = _property;
_property
保持される前に割り当てが解除される可能性があります。
サンプルの getter (これも ARC 以前) は次のとおりです。
- (NSString *)property
{
return [[property retain] autorelease];
}
これretain
により、クエリ元のオブジェクトの割り当てが解除された場合でも、戻り値が保持されることが保証されます。はautorelease
、所有していない参照を返すことを保証します (つまり、受信者は明示的に物を破棄する必要はなく、処理が終わったら忘れることができます)。返されるものが不変であるが、インスタンス変数が可変である場合、保持するのcopy
ではなく、他の誰かがそれを保持している間に返すものが変更されないようにするのが適切な形式です。
iPad・iPhoneアプリのiTunesの確認項目3
_someObj
オブジェクト(ポインタ)を格納するためのメモリ位置を置き換えます。Xcode 4 auto @synthesize anyObject = _anyObject;
-> したがって、もう書く必要はあり@synthesize
ません。
.m ファイルに他のオブジェクトまたは _anyMemoryLocation を書き込む前に、.m ファイル内のすべての名前を書き換えたくない場合は @synthesize yourObj = _anyMemeryLocation を使用できます。
セッターおよびゲッター 2 メソッドは、クラスの外部または内部でオブジェクトの値を設定または取得するために使用します。
-(void)setObject:(ObjectType *) object;
-(void)getObject:(ObjectType *) object;
キーとなる非アトミック自動生成セッターとゲッター。
より多くのメソッドを実装したい場合は、setObject を使用して、.m ファイルに書き直すことができます。
-(void)setObject:(ObjectType *) object{
_object = object; //rewrite setter can done anywhere in your.m file
//Add more method
}