2017-03-10 7 views
0

これらのコード行がメモリリークを引き起こすことを示していますが、何が間違っていますか?URLメモリリーク

required init(data: JSON) { 
     self.type = data["type"].stringValue 
     self.name = data["name"].stringValue 
     self.numberOfRestaraunts = data["length"].intValue 
     self.isFavourited = data["isFavourited"].boolValue 
     self.image = URL(string: data["img"].stringValue)! //<- this 
     self.id = data["id"].stringValue 
     self.headerImage = URL(string: data["header"].stringValue)! //<- this 
     if data["colorSchema"].stringValue == "Dark" { 
      self.colorTheme = .dark 
     } else { 
      self.colorTheme = .light 
     } 
     self.color = data["color"].stringValue 
     self.metaScore = data["metaScore"].intValue 
     self.typeMetaScore = data["typeMetaScore"].int ?? 0 
    } 

それは実際に漏れがNSURLクラスであることを示しています。

EDIT:スクリーンショット:

enter image description here enter image description here

+0

楽器にはどんな種類の漏れがありますか? – Eendje

+0

@Eendjeがスクリーンショットを追加しました – JuicyFruit

答えて

0

あなたは、オプションのオブジェクトをアンラップ力です。

if let url = URL(string: data["img"].stringValue) { 
    self.image = url 
} 

にラインself.image = URL(string: data["img"].stringValue)!を変更しようと、このself.headerImage = URL(string: data["header"].stringValue)!ライン

if let url = URL(string: data["header"].stringValue) { 
    self.headerImage = url 
} 

に強制アンラッピングは良い習慣ではありません可能な場合、あなたはそれを避ける必要があります。お役に立てれば!

+0

まだ ''もし '' let ''の行に、 – JuicyFruit

0

これを試してもよろしいですか?

if let image_url = URL(string: data["img"].stringValue) 
{ 
    self.image = image_url 
} 

...とJSONタイプsubscriptOptionalを返す場合、これはあまりにも...

if let header_url = URL(string: data["header"].stringValue) 
{ 
    self.headerImage = image_url 
} 

あなたはchechてもらえますか?

+0

がまだ漏れていれば、 'JSON'は' Optional'ではなく 'String'を返します。 – JuicyFruit