2016-04-10 1 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

私のケースでは、サブディクショナリを取得しようとしたときに問題がこの辞書の後者の使用であることが判明しました。

問題は、型を指定せずに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) 
} 
関連する問題