2011-09-11 5 views

答えて

8

ビル:

あなたがプロパティを作成するとき、あなたは自動的に@synthesizeディレクティブでgetterメソッドとsetterメソッドを作成することができます。コンパイラは、二つの方法

- (id) delegate; 
- (void) setDelegate: (id) newDelegate; 

を作成するだけでなく、同時に(本質的ロック)でプロパティを変更することから、複数のスレッドを防ぐために、この周囲に余分なコードを置くだけでなく。 nonatomicは、コードがスレッドセーフである必要がないことをコンパイラーに通知します。これは、コードが少なく、パフォーマンスが向上することを意味します。 retainと、コンパイラによって作成された

セッターはこのようなものになります。

- (void) setDelegate: (id) newDelegate { 
    if (delegate != newDelegate) { 
     [delegate release]; 
     delegate = [newDelegate retain]; 
    } 
} 

を、あなたのクラスのdealloc方法で保持性質を解放する必要がある理由です。一般的なアドバイスは、あなたのデリゲートを保持しないことですので

は、あなたの代わりにretainassignを使用し、セッターは次のようになります。

- (void) setDelegate: (id) newDelegate { 
    if (delegate != newDelegate) { 
     delegate = newDelegate; 
    } 
} 
1

の割り当ては、単にint型のxのような割り当てである:私はそれは私が「割り当て」のキーワードを参照してください最初の時間です(、非アトミック保持)を参照するために使用します= yはメモリ管理なし(retainと同様)。

2

最初に私はここであなたを説明すると思ったが、私はこれを見つけたlinkとよく考えているかもしれないと思う。

assign

セッターは単純な代入を使用することを指定します。この属性はデフォルトです。

通常、この属性は、NSIntegerやCGRectなどのスカラータイプ、または所有していないオブジェクト(代理人など)の(参照カウントされた環境内の)スカラータイプに使用します。

ガーベッジコレクション環境では、保持と割り当ては実質的に同じです。ピーターの答えに

関連する問題