Добавление двух центов на улучшение точности и стиля. В большинстве случаев вы будете использовать selfв этом блоке только одного или нескольких членов , скорее всего, просто для обновления слайдера. Кастинг selfизлишним. Вместо этого лучше быть явным и приводить только те объекты, которые вам действительно нужны внутри блока. Например, если это UISlider*, скажем, экземпляр _timeSlider, просто сделайте следующее до объявления блока:
UISlider* __weak slider = _timeSlider;
Тогда просто используйте sliderвнутри блока. Технически это более точно, так как сужает потенциальный цикл сохранения только к нужному объекту, а не ко всем объектам внутри.self .
Полный пример:
UISlider* __weak slider = _timeSlider;
[_embeddedPlayer addPeriodicTimeObserverForInterval:CMTimeMake(1, 1)
queue:nil
usingBlock:^(CMTime time){
slider.value = time.value/time.timescale;
}
];
Кроме того, наиболее вероятно, что объект, приводимый к слабому указателю, уже является слабым указателем внутри, selfа также минимизирует или полностью исключает вероятность сохранения цикла. В приведенном выше примере _timeSliderэто свойство хранится как слабая ссылка, например:
@property (nonatomic, weak) IBOutlet UISlider* timeSlider;
С точки зрения стиля кодирования, как и в C и C ++, объявления переменных лучше читать справа налево. Декларирование SomeType* __weak variableв таком порядке читает более естественно справа налево , как: variable is a weak pointer to SomeType.
timerDispсвойство в классе?