私はシングルトンを作成しています:ブロック内の[self new]は強い参照サイクルを作成しますか?以下に示すよう
static MyType* shared = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
shared = [self new];
});
return shared;
Iは、ブロック内のコードが一度実行され、self
、その時点でnil
であろうことを知っているので、[self new]
は[MyType new]
に等しくなります。しかし、私は状況について考えていましたが、[self new]
をブロック内で呼び出すと、シングルトンの目的ではなく、複数回呼び出すことができます。
will [self new]
[MyType new]
のように動作するか、ブロックにはself
が記録されますか? [self new]
を使用してMyType
の新しいインスタンスを作成するのは正しい方法ですか? [MyType new]
の代わりに[self new]
を使用した場合のメリットは何ですか?
を。あなたがそれの外に[self new]を呼びたいならば、シングルトンを作ることに意味はありません。 –
@TejaNandamuri質問は、 "それは[自己新鮮な]を使用するブロックは、自己をキャプチャするだろうか?"、申し訳ありませんが問題の明確化されていない場合。 – WantToKnow
いいえ、selfを使用してブロックを呼び出さない限り、強い参照は作成されません。ブロック内で自己を呼びたい場合は弱者を使うべきです。それはここで最善のものです。http://stackoverflow.com/questions/20030873/always-pass-weak-reference-of-self-into-block-in-arc –