Додавання двох центів для підвищення точності та стилю. У більшості випадків 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властивість класу?