【问题标题】:Coredata memory leak: Deinit does not get called.. causing memory leakCoredata内存泄漏:Deinit没有被调用..导致内存泄漏
【发布时间】:2017-01-13 11:26:27
【问题描述】:

我正在将消息保存到 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 中时,如果我关闭视图控制器,它将不再被调用 deinit。

有人知道发生了什么吗?

【问题讨论】:

    标签: ios swift core-data memory-leaks nsfetchedresultscontroller


    【解决方案1】:

    任何内存泄漏都可能是由代码中的循环引用引起的。以下两行看起来很可疑......

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

    message.user 指向friendfriend.lastMessage 指向message。只要他们被释放,你应该没问题。什么是对您的视图控制器的引用?

    【讨论】:

    • 嗨,你如何释放它们?
    • 另外,什么是对您的 viecontroller 的引用是什么意思,如果我理解正确,前一个控制器持有对它的引用以将用户信息传输到下一个控制器
    • 顺便说一句,这只会在我发送消息时发生
    • 你能解决这个问题吗?解决办法是什么?
    猜你喜欢
    • 2016-07-10
    • 1970-01-01
    • 2015-07-06
    • 2014-06-07
    • 2013-11-20
    • 2011-10-28
    • 2016-01-18
    • 2012-12-13
    • 1970-01-01
    相关资源
    最近更新 更多