2011-09-12 6 views

答えて

4

あなたのプロパティの宣言方法によって異なります。使用した場合

@property (nonatomic, retain) NSString *someString; 

setStringはsomeStringを保持するために作成されます。この場合、正しい方法が最初の方法です。

@property (nonatomic, assign) NSString *someString; 

2番目の方法では、ポインタを割り当てて何も保持しないので、正しい方法です。

1

答えは@propertyの定義によって異なります。おそらく、の場合は(retain)または(copy)のようなものでしょう。その場合、self.characterに代入すると、保持カウントがインクリメントされます。だから、一番下:

self.character = [[NSString alloc] init]; 

は、あなたはそれが漏れますのでアロケーションとself.characterで1に、カウントを保持はまた、2のカウントのためにそれを保持します設定しました。

self.character = [[[NSString alloc] init] autorelease]; 

またはトップバージョンである必要があります。

3

あなたのプロパティをどのように定義したかによって異なります。

copyまたはretainの場合、合成された設定者(例ではsetCharacter:)は、プロパティに割り当てたオブジェクトの所有権を取得します。この状況では、最初の例が正しいです。 2回目はNSStringの所有権を2回要求しているのでメモリリークにつながります(おそらく)所有権を一度だけ放棄します。したがって、メモリは再利用することはできません。

一方、assignの場合、セッターは特別なことを行わず、2番目の例は正しいでしょう。 NSStringで何かをしようとすると、最初にEXC_BAD_ACCESSエラーが発生します。私はあなたが一般的にプリミティブ型と代理人のためにassignを使用することに注意する必要があります。

「Objective-Cプログラミング言語ガイド」のMemory Management Programming GuideDeclared Propertiesのセクションを読んでください。

0

iOS 5のこれに対する答えは、ARCを使用することです。

関連する問題