Nehmen wir folgende Situation:Warum beanstandet Xcode manchmal und nicht immer wenn self in einem Block verwendet wird?
self.collectionViewController.didEndDisplayingCell = ^(CollectionViewCell *cell) {
[self doSomething];
};
Xcode wird sich beschweren, dass ich nicht selbst innerhalb dieser Methode verwenden können, oder ich einen Zyklus behalten haben.
Dann eine andere Situation. Ich erstelle eine Klasse, die ein Bild lädt und läuft etwas nach Abschluss und nenne es gerne
[[MyImageClass sharedInstance] loadImageFromUrl:url
runOnCompletion:^(UIImage *image) {
[self doSomething];
}];
Xcode wird in diesem Fall nicht beschweren und selbst innerhalb eines Blockes verwendet wird!
warum?
das den zweiten Fall nicht erklärt. Ich meine, warum xcode sich nicht beschwert. – SpaceDog
Stellen Sie sicher, dass Sie den ersten Fall verstehen. Sie werden den 2. Fall verstehen. Über den zweiten Fall: die 'sharedInstance' von' MyImageClass' behält das Blockobjekt, das Blockobjekt behält das 'self' Objekt, das' self' Objekt behält keinen starken Bezug auf das Blockobjekt. In diesem Fall gibt es keinen Retain-Zyklus! – Proton