Ajout de deux cents sur l'amélioration de la précision et du style. Dans la plupart des cas, vous n'utiliserez qu'un ou deux membres de self
dans ce bloc, très probablement juste pour mettre à jour un curseur. Le casting self
est exagéré. Au lieu de cela, il vaut mieux être explicite et ne diffuser que les objets dont vous avez vraiment besoin à l'intérieur du bloc. Par exemple, si c'est une instance de UISlider*
, disons, _timeSlider
faites simplement ce qui suit avant la déclaration de bloc:
UISlider* __weak slider = _timeSlider;
Ensuite, utilisez simplement l' slider
intérieur du bloc. Techniquement, cela est plus précis car il réduit le cycle de rétention potentiel à l'objet dont vous avez besoin, pas à tous les objets à l'intérieur self
.
Exemple complet:
UISlider* __weak slider = _timeSlider;
[_embeddedPlayer addPeriodicTimeObserverForInterval:CMTimeMake(1, 1)
queue:nil
usingBlock:^(CMTime time){
slider.value = time.value/time.timescale;
}
];
De plus, très probablement, l'objet projeté sur un pointeur faible est déjà un pointeur faible à l'intérieur, ce self
qui minimise ou élimine complètement la probabilité d'un cycle de rétention. Dans l'exemple ci-dessus, _timeSlider
est en fait une propriété stockée en tant que référence faible, par exemple:
@property (nonatomic, weak) IBOutlet UISlider* timeSlider;
En termes de style de codage, comme avec C et C ++, les déclarations de variables sont mieux lues de droite à gauche. Déclarant SomeType* __weak variable
dans cet ordre se lit plus naturellement de droite à gauche comme: variable is a weak pointer to SomeType
.
timerDisp
propriété est-elle sur la classe?