Agregar dos centavos para mejorar la precisión y el estilo. En la mayoría de los casos, solo usará uno o un par de miembros selfen este bloque, lo más probable es que solo actualice un control deslizante. El casting selfes exagerado. En cambio, es mejor ser explícito y lanzar solo los objetos que realmente necesita dentro del bloque. Por ejemplo, si se trata de una instancia de UISlider*, digamos _timeSlider, simplemente haga lo siguiente antes de la declaración de bloque:
UISlider* __weak slider = _timeSlider;
Luego, solo use sliderdentro del bloque. Técnicamente, esto es más preciso, ya que reduce el ciclo de retención potencial solo al objeto que necesita, no a todos los objetos que contiene self.
Ejemplo completo:
UISlider* __weak slider = _timeSlider;
[_embeddedPlayer addPeriodicTimeObserverForInterval:CMTimeMake(1, 1)
queue:nil
usingBlock:^(CMTime time){
slider.value = time.value/time.timescale;
}
];
Además, lo más probable es que el objeto que se está lanzando a un puntero débil ya sea un puntero débil en el interior, lo selfque minimiza o elimina por completo la probabilidad de un ciclo de retención. En el ejemplo anterior, en _timeSliderrealidad es una propiedad almacenada como una referencia débil, por ejemplo:
@property (nonatomic, weak) IBOutlet UISlider* timeSlider;
En términos de estilo de codificación, como en C y C ++, las declaraciones de variables se leen mejor de derecha a izquierda. Declarando SomeType* __weak variableen este orden lee de forma más natural de derecha a izquierda como: variable is a weak pointer to SomeType.
timerDispuna propiedad en la clase?