Menambahkan dua sen untuk meningkatkan ketepatan dan gaya. Dalam kebanyakan kasus, Anda hanya akan menggunakan satu atau beberapa anggota selfdi blok ini, kemungkinan besar hanya untuk memperbarui slider. Casting selfitu 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, _timeSliderlakukan saja hal berikut sebelum deklarasi blok:
UISlider* __weak slider = _timeSlider;
Kemudian gunakan saja sliderdi 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 selfjuga meminimalkan atau menghilangkan sepenuhnya kemungkinan siklus penahan. Dalam contoh di atas, _timeSlidersebenarnya 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 variabledalam rangka ini berbunyi lebih alami dari kanan ke kiri sebagai: variable is a weak pointer to SomeType.
timerDispada properti di kelas?