2015-11-11 10 views
9

का कारण बनता है अगर मैं एक बंद करने और self?UIView.animateWithDuration अंदर के रूप में संदर्भ self पर [weak self] घोषित एप्लिकेशन दुर्घटना होगा:[कमजोर आत्म] को स्वयं के रूप में संदर्भित करना? अंदर animateWithDuration दुर्घटना

someFunc() { [weak self] (success) -> Void in 
    UIView.animateWithDuration(0.25) { 
     self?.someView.alpha = 1; 
    } 
} 

एक message sent to deallocated instance

साथ लेकिन अगर मैं खोलना स्वयं आगे वैकल्पिक समय की ऐसा नहीं टी

someFunc() { [weak self] (success) -> Void in 
    if let weakself = self { 
     UIView.animateWithDuration(0.25) { 
      weakself.someView.alpha = 1; 
     } 
    } 
} 

ऐसा क्यों है, मुझे लगता है कि इससे कोई फर्क नहीं पड़ता कि मैं कमजोर से संदर्भित करता हूं एलएफ क्योंकि इसे "बस" वैकल्पिक रूप से self? को अनदेखा करना चाहिए। संदर्भ के लिए यह एक UICellView जो पुनः आवंटित की जाती है में किया जाता है जब मैं UICollectionViewController

संपादित छोड़: सेब के साथ एक बग दायर: # 23492648

+0

यह वास्तव में वास्तव में अजीब है, मुझे एक बग की तरह गंध करता है। बीटीडब्ल्यू अनावश्यक '; 'के साथ क्या हो रहा है? क्या आप एक समारोह बुला रहे हैं या यह एक संपत्ति है? – Kametrixom

+1

यह इंगित करने के लिए धन्यवाद, मैंने इसे 'doSomething' के बजाय स्पष्टता के लिए संपादित किया। मैंने अपने कोडबेस में ';' का उपयोग करने के लिए धक्का दिया क्योंकि यह बयान के अंत को स्पष्ट करता है। ऐसी स्थितियां हैं जहां आप एक कथन को एक पंक्ति लपेट सकते हैं और यह सुपर स्पष्ट नहीं है :) – Shizam

+0

यह एक अच्छी बग रिपोर्ट है, और आपको इसे ऐप्पल को रिपोर्ट करनी चाहिए। लेकिन यह सच है कि आपको हमेशा एक कमजोर काम में कमजोर रूप से गुजरने के दौरान कमज़ोर-मजबूत नृत्य करना चाहिए, जैसा कि आप दूसरे उदाहरण में करते हैं ('अगर कमजोर = स्वयं'), तो बस इसे करें और आगे बढ़ें। – matt

उत्तर

3

मुझे लगता है कि समस्या है कि यहाँ self विशेष है। आपने self को संदर्भ बनाए रखने के लिए अज्ञात फ़ंक्शन में संदर्भित किया है, लेकिन इस कहानी में वास्तव में वैकल्पिक वैकल्पिक रैपिंग self नहीं है। इस प्रकार, वाक्य रचनात्मक चीनी self?.someView.alpha = 1 - और याद रखें, यह केवल वाक्य रचनात्मक चीनी है - काम नहीं करता है।

ऐसा हो सकता है कि ऐप्पल इसे एक बग के रूप में मानेगा; या शायद नहीं। लेकिन किसी भी तरह से, समाधान औपचारिक रूप से करना है कि आप दूसरे उदाहरण में क्या कर रहे हैं: कमजोर-मजबूत नृत्य स्पष्ट रूप से करें।

संबंधित मुद्दे