2014-07-22 10 views
8

में विकल्प का उपयोग करते समय मेमोरी लीक स्विफ्ट के साथ स्ट्रिंग इंटरपोलेशन का उपयोग करते समय मैं मेमोरी रिसाव का पता लगा रहा हूं। "लीक" उपकरण का उपयोग करके, यह लीक ऑब्जेक्ट को "मॉलोक 32 बाइट्स" के रूप में दिखाता है, लेकिन कोई जिम्मेदार लाइब्रेरी या फ्रेम नहीं है। यह स्ट्रिंग इंटरपोलेशन में विकल्प का उपयोग करके होता है।स्ट्रिंग इंटरपोलेशन

class MySwiftObject 
{ 
    let boundHost:String? 
    let port:UInt16 

    init(boundHost: String?, port: UInt16) 
    { 
     if boundHost { 
      self.boundHost = boundHost! 
     } 
     self.port = port 

     // leaks 
     println("Server created with host: \(self.boundHost) and port: \(self.port).") 
    } 
} 

हालांकि, अगर मैं बस जोड़कर टुकड़े, कोई स्मृति रिसाव से एक स्ट्रिंग के निर्माण के साथ स्ट्रिंग प्रक्षेप बदलें।

// does not leak 
    var message = "Server created with host: " 
    if self.boundHost 
    { 
     message += self.boundHost! 
    } 
    else 
    { 
     message += "*" 
    } 
    message += " and port: \(self.port)" 
    println(message) 

क्या कुछ ऐसा है जो मैं ऊपर गलत कर रहा हूं, या बस एक स्विफ्ट बग?

उत्तर

7

मेरे अपने प्रश्न का उत्तर देना ...

यह सशर्त बंधन लगता है जब स्ट्रिंग प्रक्षेप का उपयोग कर के बजाय सीधे optionals का उपयोग कर जाने के लिए सही रास्ता है। निश्चित नहीं है कि संकलक भी इसे अनुमति देता है।

नोट: अगर किसी के पास बेहतर उत्तर या बेहतर स्पष्टीकरण है, तो कृपया एक नया उत्तर जोड़ें।

init(boundHost: String?, port: UInt16) 
{ 
    if boundHost { 
     self.boundHost = boundHost! 
    } 
    self.port = port 

    if let constBoundHost = self.boundHost 
    { 
     println("Server created with host: \(constBoundHost) and port: \(self.port).") 
    } 
    else 
    { 
     println("Server created with host: * and port: \(self.port).") 
    } 
} 
+0

मुझे यह समस्या भी आई, यह libswiftcore में 32 बाइट्स को लीक करता है जब मैंने एक प्रतिनिधि कॉलबैक में प्रिंटलन कहा। मेरा समाधान अभी जोड़ा "!" – PatrickSCLin

+1

यदि आप इसकी स्थिति जांचना चाहते हैं तो [bugs.swift.org] (https://bugs.swift.org/browse/SR-1728) पर एक समान समस्या के लिए यहां एक बग रिपोर्ट है। – user2067021

+0

मान लीजिए कि मुझे एक नई नई फैंसी भाषा का उपयोग करने की अपेक्षा की जानी चाहिए – Sirens

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