は、次のような状況を仮定しますブロック内で自己が使用されていると、Xcodeが時には不満を持ち、いつもそうではないのですか?
self.collectionViewController.didEndDisplayingCell = ^(CollectionViewCell *cell) {
[self doSomething];
};
Xcodeは私がそのメソッドの内部で自己を使用することはできませんと文句を言うだろうか、私は保持サイクルを持つことになります。
次に、別の状況です。私はそれが好きな画像をロードし、完了時に何かを実行し、呼び出すクラスを作成
[[MyImageClass sharedInstance] loadImageFromUrl:url
runOnCompletion:^(UIImage *image) {
[self doSomething];
}];
Xcodeのは、その場合には文句を言わないだろうし、自己がブロック内で使用されています!
なぜですか?
これは、2番目のケースを説明していません。私はなぜxcodeが不平を言っていないのかを意味します。 – SpaceDog
最初のケースを理解してください。 2番目のケースを理解します。第2のケースについて: 'MyImageClass'の' sharedInstance'はブロックオブジェクトを保持し、ブロックオブジェクトは 'self'オブジェクトを保持し、' self'オブジェクトはブロックオブジェクトを強く参照しません。この場合、保持サイクルはありません! – Proton