2016-04-10 7 views
5

का उपयोग करते समय स्विफ्ट लीक मैं NSDictionary के लिए एक एक्सटेंशन लिखना चाहता हूं, इसलिए मैं इसे आसानी से डेटा से बना सकता हूं। मैंने इसे इस तरह लिखा:NSJSONSerialization

extension Dictionary { 
    init?(data: NSData?) { 
     guard let data = data else { return nil } 
     // TODO: This leaks. 
     if let json = (try? NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions())) as? Dictionary { 
      self = json 
     } 
     else { return nil } 
    } 
} 

यह लीक क्यों नहीं पता चल सकता है। कोई विचार?

+0

के बारे में बताएं आप लीक – smac89

+0

आप सही हैं द्वारा क्या मतलब है, मेरी टीम से किसी को सिर्फ एप्लिकेशन पर हम काम कर रहे थे पर एक प्रोफाइलर भाग गया और एक ऐसी ही समस्या मिली – smac89

उत्तर

6

मेरे मामले में यह पता चला कि समस्या इस शब्दकोश के बाद के उपयोग में थी जब मैंने उससे उप-संदेश प्राप्त करने का प्रयास किया था। इस कोड में सटीक होना करने के लिए:

var location: CLLocation? = nil 
if let geometryDictionary = json["geometry"], locationDictionary = geometryDictionary["location"], latitude = locationDictionary["lat"] as? CLLocationDegrees, longitude = locationDictionary["lng"] as? CLLocationDegrees { 
    location = CLLocation(latitude: latitude, longitude: longitude) 
} 

समस्या यह है कि मैं अपने प्रकार निर्दिष्ट किए बिना geometryDictionary और locationDictionary संदर्भ प्राप्त था, इसलिए संकलक मान लिया वे AnyObject हैं। मैं अभी भी अपना मूल्य शब्दकोष से प्राप्त करने में सक्षम था इसलिए कोड काम करता था। जब मैंने उन्हें टाइप जोड़ा, तो लीक रुक गई।

var location: CLLocation? = nil 
if let geometryDictionary = json["geometry"] as? [String : AnyObject], locationDictionary = geometryDictionary["location"] as? [String : AnyObject], latitude = locationDictionary["lat"] as? CLLocationDegrees, longitude = locationDictionary["lng"] as? CLLocationDegrees { 
    location = CLLocation(latitude: latitude, longitude: longitude) 
} 
संबंधित मुद्दे