परिशुद्धता और शैली में सुधार पर दो सेंट जोड़ना। ज्यादातर मामलों में आप 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;
कोडिंग शैली के संदर्भ में, सी और सी ++ के साथ, चर घोषणाएं सही से बाईं ओर पढ़ी जाती हैं। SomeType* __weak variableइस क्रम में घोषणा करने से दाहिनी से बाईं ओर अधिक स्वाभाविक रूप से पढ़ता है variable is a weak pointer to SomeType:।
timerDispवर्ग पर एक संपत्ति है?