簡體   English   中英

Coredata內存泄漏:未調用Deinit ..導致內存泄漏

[英]Coredata memory leak: Deinit does not get called.. causing memory leak

我將消息保存到coredata中,當我離開控制器時,它不會取消初始化。 每當我提出一個帶有內部函數的新控制器時,這也會導致內存泄漏越來越大。

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

}

當消息保存到coredata中時,如果我關閉了viewcontroller,則不再調用deinit。

有誰知道發生了什么嗎?

任何內存泄漏都可能由代碼中的循環引用引起。 以下兩行看起來可疑...

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

message.user指向friend ,而friend.lastMessage指向message 只要他們被釋放,你就應該沒事。 什么持有對您的視圖控制器的引用?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM