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 self
en este bloque, lo más probable es que solo actualice un control deslizante. El casting self
es 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 slider
dentro 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 self
que minimiza o elimina por completo la probabilidad de un ciclo de retención. En el ejemplo anterior, en _timeSlider
realidad 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 variable
en este orden lee de forma más natural de derecha a izquierda como: variable is a weak pointer to SomeType
.
timerDisp
una propiedad en la clase?