0

セッターとゲッターが自動的に作成されることはわかっていますが、セッターが実際にどのように「見える」かはわかりません。

@synthesize someObject = _someObject;また、単に の代わりに言うことが推奨されるのはなぜ@synthesize someObject;ですか?

4

2 に答える 2

7

最初に簡単に説明します。もう必要ありません@synthesize。があり、@propertyそれを合成しない場合は、フォームの が暗示され@synthesize someObject = _someObject;ます。を省略した場合= _someObjectは、 と同じになります@synthesize someObject = someObject;。したがって、アンダースコア バージョンが推奨されます。Apple がインスタンス変数にアンダースコアを推奨する方向に戻ったことと、暗黙の型の合成と一貫性があるためです。

setter と getter の正確な形式はatomicstrongunsafe_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ではなく、他の誰かがそれを保持している間に返すものが変更されないようにするのが適切な形式です。

于 2013-07-25T02:05:27.557 に答える
2

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
}
于 2013-07-25T02:26:35.850 に答える