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 self
aşı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, _timeSlider
sadece blok bildirimi önce aşağıdakileri yapın:
UISlider* __weak slider = _timeSlider;
Sonra sadece slider
blok 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 self
ve 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 variable
olarak sola bu sırada sağdan daha doğal okur: variable is a weak pointer to SomeType
.
timerDisp
sınıfın bir özellik?