Hinzufügen von zwei Cent zur Verbesserung von Präzision und Stil. In den meisten Fällen verwenden Sie selfin diesem Block nur ein oder mehrere Mitglieder von , wahrscheinlich nur, um einen Schieberegler zu aktualisieren. Casting selfist übertrieben. Stattdessen ist es besser, explizit zu sein und nur die Objekte zu werfen , die Sie wirklich benötigen, innerhalb des Blocks. Zum Beispiel, wenn es eine Instanz ist UISlider*, sagen wir, _timeSlidertun gerade folgendes vor dem Block Erklärung:
UISlider* __weak slider = _timeSlider;
Dann einfach sliderinnerhalb des Blocks verwenden. Technisch gesehen ist dies genauer, da der potenzielle Aufbewahrungszyklus nur auf das Objekt beschränkt wird, das Sie benötigen, nicht auf alle Objekte im Inneren self.
Vollständiges Beispiel:
UISlider* __weak slider = _timeSlider;
[_embeddedPlayer addPeriodicTimeObserverForInterval:CMTimeMake(1, 1)
queue:nil
usingBlock:^(CMTime time){
slider.value = time.value/time.timescale;
}
];
Darüber hinaus ist das Objekt, das in einen schwachen Zeiger umgewandelt wird, höchstwahrscheinlich bereits ein schwacher Zeiger im Inneren, selfwodurch die Wahrscheinlichkeit eines Aufbewahrungszyklus minimiert oder vollständig beseitigt wird. Im obigen Beispiel _timeSliderist tatsächlich eine Eigenschaft als schwache Referenz gespeichert, z.
@property (nonatomic, weak) IBOutlet UISlider* timeSlider;
In Bezug auf den Codierungsstil werden Variablendeklarationen wie bei C und C ++ besser von rechts nach links gelesen. Die Erklärung SomeType* __weak variablein dieser Reihenfolge lautet natürlicher von rechts nach links als : variable is a weak pointer to SomeType.
timerDispeine Eigenschaft in der Klasse?