2016-03-28 17 views
1

Yalnızca dış taraf self referansı olduğunda iç kapamada weak self kullanmam gerekir mi? Dış kapak sadece iç kapamada kullanıldığında bile self'u yakalar mı?Yuvalanmış bir kapatma işlemi döngüsü sürdürüyor mu?

self.myClosure = { 
    // First do something in the background without self... 

    // Then do something in the main thread with self... 
    dispatch_async(dispatch_get_main_queue()) { 

     [weak self] in // IS THIS REALLY NEEDED? 

     self?.underlyingImage = img 
     self?.imageLoadingComplete() 
    } 
} 
+1

Evet, 'zayıf kendini' ye ihtiyacınız var. Sanırım dış kapağa gerçekten ihtiyacınız olabilir. – dan

cevap

6

Sorun, kapağın yuvalandığı değil. Sorun, kendinin kapamaya güçlü bir referans vermesidir, bu yüzden eğer kapağın kendiliğine güçlü bir referansı varsa, bir referans döngüsü elde edersiniz. Bununla birlikte, kod hala bir referans döngüsüne sahiptir. İç kapak kendini arama kodundan değil, dış kapağın içinden alır. Yani dış kapağın kendiliğinden görünmez güçlü bir referansı var. Dış kapağın üzerinde "zayıf benlik" gereklidir.

+0

[Bu makale] 'ne göre (http://kelan.io/2015/the-weak-strong-dance-in-swift/) _Often ile döngüleri korumaktan kaçınmak için' zayıf 'referansları kullanma konusunda endişelenmeyin. 'dispatch_async()', çünkü blok 'self'_'e ait değil –

İlgili konular