2

いくつかのサイトはこれを言っています:

@property (nonatomic, strong) MyObject *foo;

self.foo = [[MyObject alloc] init];

保持カウントを2に増やします

しかし、最新のxcodeバージョンまたはARC以来、これは問題ではないはずですよね?

ビデオによると、私たちはすべての自動リリースを取り出すことができます

だからこれから:

@property (nonatomic, strong) MyObject *foo;

self.foo = [[[MyObject alloc] init] autorelease];

これに変わります

@property (nonatomic, strong) MyObject *foo;

self.foo = [[MyObject alloc] init];

self.foo = [[MyObject alloc] init];それで、保持カウントを2に増やすと言っているWebサイトを無視する必要がありますか?

4

2 に答える 2

3

ARCがない場合は、(および)ではなく(およびそれに応じて)を使用する必要がありretainます。最初の例では、ARCを使用しない場合、メソッドは保持カウントが1のオブジェクトを返し、プロパティのセッターは保持カウントを2にインクリメントします。assignstrongweak- initfoo

2番目の例(ARCでは使用できないためARCなしである必要がありautoreleaseます)では、- autorelease呼び出しによってオブジェクトが自動解放プールに追加され、保持カウントが1減少するため、オブジェクトの保持カウントは1になります(プロパティ)。

ARCを使用すると、3番目の例のように、保持カウントについてまったく心配する必要がありません。これがARCのポイントです。内部的に- initは、保持カウント1のオブジェクトを返す必要があり、のセッターfooは保持カウントをインクリメントする必要がありますが、コンパイラーは- release、セッターが呼び出された後のどこかに挿入する必要があります。基本的に、ARCでは、プロパティがであるため、プロパティに割り当てた後もオブジェクトが存在し続けることを信頼でき、//strongについて考える必要はありません。retainreleaseautorelease

于 2013-03-22T23:55:26.203 に答える
1

ARCはそのステートメントを真実ではありません。自動リリースはなくなりませんでした。コンパイラによって挿入されただけで、表示されません。

于 2013-03-22T23:50:42.097 に答える