2017-02-01 17 views
10

मैं अक्सर ऐसा करते हैं,कमजोर आत्म कहाँ जाता है?

let when = DispatchTime.now() + 2.0 
DispatchQueue.main.asyncAfter(deadline: when) { 
    beep() 
} 

और एक ही ऐप्स में हम अक्सर करते हैं इस

tickle.fresh(){ 
    msg in 
    paint() 
} 

लेकिन इस

let when = DispatchTime.now() + 2.0 
DispatchQueue.main.asyncAfter(deadline: when) { 
    tickle.fresh(){ 
     msg in 
     paint() 
    } 
} 
निश्चित रूप से

आप करने के लिए यदि आप करना यह

let when = DispatchTime.now() + 2.0 
DispatchQueue.main.asyncAfter(deadline: when) { [weak self] _ in 
    tickle.fresh(){ 
     msg in 
     self?.paint() 
    } 
} 

या, शायद इस

let when = DispatchTime.now() + 2.0 
DispatchQueue.main.asyncAfter(deadline: when) { 
    tickle.fresh(){ 
     [weak self] msg in 
     self?.paint() 
    } 
} 

या शायद इस

let when = DispatchTime.now() + 2.0 
DispatchQueue.main.asyncAfter(deadline: when) { [weak self] _ in 
    tickle.fresh(){ 
     [weak self] msg in 
     self?.paint() 
    } 
} 

डब्ल्यू टी एच हम क्या करना चाहिए?

सभी तीन सुझाव पूरी तरह से काम करने के लिए प्रतीत होता है। यहां अर्थ की पूरी गहराई क्या है? और कौन सा करना चाहिए?

और अंतिम में, आपको [weak self?] जैसे कुछ कहने की ज़रूरत क्यों नहीं है?

नोट - खेद है कि अगर मैं स्पष्ट नहीं था, निहितार्थ

func paint() { 
    paintSomething 

    let t = DispatchTime.now() + 2.0 
    DispatchQueue.main.asyncAfter(deadline: t) { weak maybe 
     tickle.fresh(){ weak maybe 
      guard self != nil else { 
       print("retired correctly!! hooray! thanks SO!") 
       return 
      } 
      self?.paint() 
     } 
    } 
} 

तो है, हम करेंगे पेंट, (जैसे कि, बादल से खेल जानकारी और उसके बाद के लिए कहते हैं) दो सेकंड प्रतीक्षा करें और है कि ऐसा करना जारी रखें बार बार; लेकिन निश्चित रूप से आप इसे देखने के लिए को पूरी तरह बंद करना चाहते हैं।

  • एक पूछता है ............ कमजोर संदर्भ, एक कमजोर या मजबूत संदर्भ का एक मजबूत संदर्भ है?

नोट: के रूप में यह होता है, यह विशेष रूप से self का उपयोग नहीं करता: मेरे उदाहरण में, tickle.fresh(){} सिर्फ एक सिंगलटन या कुछ और कहता है। तो अगर आप ऐसा करते हैं चाहते हैं:

सभी की
func paint() { 
    paintSomething 

    let t = DispatchTime.now() + 2.0 
    DispatchQueue.main.asyncAfter(deadline: t) { [weak self] _ in 
     guard self != nil else { 
      print("retire early, don't even bother going to the cloud!") 
      print("thanks, SO!") 
      return 
     } 
     tickle.fresh(){ [weak self] _ in 
      guard self != nil else { 
       print("went to the cloud, then got retired!") 
       print("thanks, SO!") 
       return 
      } 
      self?.paint() 
     } 
    } 
} 

उत्तर

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