0

私はcoredataにメッセージを保存しています。また、関数が内部にある新しいコントローラを提示するたびに、メモリリークが大きくなります。Coredataメモリリーク:Deinitは呼び出されません。メモリリークを引き起こします。

func saveMessagetoCoreData(text: String, timestamp: NSNumber, status: String, friend: Friend) { 

    let moc = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext 
    let doubletimestamp = Double(timestamp) 
    let date = NSDate(timeIntervalSinceReferenceDate: (doubletimestamp)) 

    createMessageWithText(text, friend: friend, context: moc, date: date, status: "...") 
    do { 
     try moc.save() 
     //moc.reset() 

    } catch let err { 
     print(err) 
    } 


private func createMessageWithText(text: String, friend: Friend, context: NSManagedObjectContext, date: NSDate, isSender: Bool = false, status: String) -> Mesages { 
    let message = NSEntityDescription.insertNewObjectForEntityForName("Mesages", inManagedObjectContext: context) as! Mesages 

    message.user = friend 
    message.text = text 
    message.timestamp = date 
    message.isSender = isSender 
    message.status = status 
    message.fromID = NSUserDefaults.standardUserDefaults().objectForKey("FBid") as! String 
    friend.lastMessage = message 

    return message 

} 

メッセージがコアデータに保存されるときに、私がviewcontrollerを閉じると、それはもはや呼び出されません。

誰もが何が起こっているか考えていますか?

答えて

2

メモリリークは、おそらくコード内の循環参照によって発生します。次の2行は... friend

message.user = friend 
    ... 
    friend.lastMessage = message 

message.userポイント、およびmessageからfriend.lastMessageポイントを不審に見えます。彼らが解放されている限り、あなたは大丈夫でしょう。 View Controllerへの参照を保持しているのは何ですか?

+0

こんにちは、どのようにそれらを解放しますか? – slimboy

+0

また、あなたのviecontrollerへの参照を保持しているものはどういう意味ですか、私が正しく理解していれば、以前のコントローラは次のコントローラにユーザ情報を転送するための参照を保持します – slimboy

+0

ところで、 – slimboy

関連する問題