Добавление двух центов на улучшение точности и стиля. В большинстве случаев вы будете использовать 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
свойство в классе?