Menambahkan dua sen untuk meningkatkan ketepatan dan gaya. Dalam kebanyakan kasus, Anda hanya akan menggunakan satu atau beberapa anggota self
di blok ini, kemungkinan besar hanya untuk memperbarui slider. Casting self
itu berlebihan. Alih-alih, lebih baik untuk eksplisit dan melemparkan hanya objek yang benar-benar Anda butuhkan di dalam blok. Misalnya, jika ini merupakan contoh dari UISlider*
, katakanlah, _timeSlider
lakukan saja hal berikut sebelum deklarasi blok:
UISlider* __weak slider = _timeSlider;
Kemudian gunakan saja slider
di dalam blok. Secara teknis ini lebih tepat karena mempersempit siklus mempertahankan potensial hanya untuk objek yang Anda butuhkan, tidak semua objek di dalam self
.
Contoh lengkap:
UISlider* __weak slider = _timeSlider;
[_embeddedPlayer addPeriodicTimeObserverForInterval:CMTimeMake(1, 1)
queue:nil
usingBlock:^(CMTime time){
slider.value = time.value/time.timescale;
}
];
Selain itu, kemungkinan besar objek yang dilemparkan ke pointer lemah sudah menjadi pointer lemah di dalam self
juga meminimalkan atau menghilangkan sepenuhnya kemungkinan siklus penahan. Dalam contoh di atas, _timeSlider
sebenarnya properti disimpan sebagai referensi yang lemah, misalnya:
@property (nonatomic, weak) IBOutlet UISlider* timeSlider;
Dalam hal gaya pengkodean, seperti halnya dengan C dan C ++, deklarasi variabel lebih baik dibaca dari kanan ke kiri. Menyatakan SomeType* __weak variable
dalam rangka ini berbunyi lebih alami dari kanan ke kiri sebagai: variable is a weak pointer to SomeType
.
timerDisp
ada properti di kelas?