2017-07-16 12 views
0

私は最近スイフトと学習メモリ管理を開始しました。そして私はメモリリークのこの問題を解決することができません。私は私のコントローラで、このモデルを使用していますiOSのメモリリーク3

class Contact { 

    var name: String? 
    var age: String? 

    weak var address: Address? 

    deinit { 
     print("Contact Delloacated") 
    } 

} 

class Address { 
    var address: String? 
} 

は、これは私のモデルクラスです。

class Controller: UIViewController { 
    var contacts: [Contact]()? 

fetchContact() { 
    let path = "some url" 
    let url = URL(string: path) 
    let session = URLSession.shared 

    let task = session.dataTask(with: url!) { [weak self] (data, 
    response, error) in 
    if error != nil { 
      print(error!) 
      return 
     } 
     if let data = data { 
      do { 
       let jsonResult = try JSONSerialization.jsonObject(with: 
       data, options: .mutableContainers) 
       self?.contacts = [Contact]() 

       let contact = Contact() 

       // do some operation to get required data and append 
       //into contactList array 

       self?.append?.append(contact) 
    } 

    override func viewDidLoad() { 
    super.viewDidLoad() 

    fetchContact() 

    } 
} 

サイクルを維持回避するために、データをフェッチしながら、私は、コントローラの「fetchContact()」メソッドの閉鎖にアドレスに接触モデル及び使用「[弱い自己]」の弱いを用いているが。でも、まだメモリリーク警告が行にあります: "self?.append?.append(contact)"。 Xcode 8.3.3で計測器からの漏れが確認されました。

コントローラークラスでもまだ連絡先の参照が強い理由が混乱しています。

+0

forループを使用していますか? –

+0

はい、ループを解析する辞書に使用しました。 – bthapa

答えて

0

あなたの場合は、for for parsing辞書を使用しています。したがって、あなたはforループ内でメモリを解放することができますautorelease

これはループ内でこれを書くと、ループが呼び出されるたびにメモリが解放されます。

autoreleasepool { 
    /* code */ 
} 
関連する問題