Hassasiyeti ve stili geliştirmek için iki sent eklemek. Çoğu durumda self, büyük olasılıkla sadece bir kaydırıcıyı güncellemek için bu blokta yalnızca bir veya birkaç üye kullanırsınız . Döküm selfaşırı. Bunun yerine, sadece blok içinde gerçekten ihtiyacınız olan nesneleri açıkça belirtmek ve yayınlamak daha iyidir . Bunun bir örneği var Örneğin, UISlider*diyelim ki, _timeSlidersadece blok bildirimi önce aşağıdakileri yapın:
UISlider* __weak slider = _timeSlider;
Sonra sadece sliderblok içinde kullanın . Teknik olarak bu, potansiyel tutma döngüsünü içerideki tüm nesnelere değil, yalnızca ihtiyacınız olan nesneye daralttığı için daha kesindir self.
Tam örnek:
UISlider* __weak slider = _timeSlider;
[_embeddedPlayer addPeriodicTimeObserverForInterval:CMTimeMake(1, 1)
queue:nil
usingBlock:^(CMTime time){
slider.value = time.value/time.timescale;
}
];
Ayrıca, büyük olasılıkla zayıf bir işaretçiye dökülen nesne zaten zayıf bir işaretçidir selfve bir tutma döngüsü olasılığını en aza indirir veya tamamen ortadan kaldırır. Yukarıdaki örnekte _timeSlider, aslında zayıf bir referans olarak depolanan bir özelliktir, örneğin:
@property (nonatomic, weak) IBOutlet UISlider* timeSlider;
Kodlama stili açısından, C ve C ++ ile olduğu gibi, değişken bildirimleri sağdan sola daha iyi okunur. Bildirmek SomeType* __weak variableolarak sola bu sırada sağdan daha doğal okur: variable is a weak pointer to SomeType.
timerDispsınıfın bir özellik?