你想达到什么目的?
UIViewController
deinit
被称为 - 0内存泄漏
预期结果
释放了Realm对象,因此引用count = 0并允许uiviewcontroller
到deinit
实际结果
Realm对象从未被释放,标准的内存崩溃,因为没有uiviewcontrollers
被取消初始化。
重现步骤
创建一些对象模型,其主要模型包含这些对象的实例。将数据解析为主模型的初始化程序内的可选对象模型。这应该会给你这些结果。
代码示例
这是我正在使用的标准对象(有更多变量,但这只是一个例子)
class FullData: Object {
dynamic var venueType: VenueType?
dynamic var travelerType: TravelerType?
dynamic var owner: ProfileData?
let keywords = List<NewKeywords>()
let cuisines = List<NewCuisines>()
let images = List<Images>()
}
在此模型的convenience
初始化中,我将使用一个函数创建一个新的VenueType
实例,并将该新实例分配给模型中的可选变量。
fileprivate func parseVenueType(_ dictionary: NSDictionary) {
let venues = VenueType()
dictionary.forEach { (key, val) in
let keyString = key as! String
let value = val as! Bool
switch keyString {
case "Bar":
if value == true {
venues.bar = true
}
break
case "Restaurant":
if value == true {
venues.restaurant = true
}
break
case "Cafe":
if value == true {
venues.cafe = true
}
break
default:
break
}
}
venueType = venues
}
以下是VenueType
和TravelerType
类设置类
class VenueType: Object {
dynamic var cafe = false
dynamic var bar = false
dynamic var restaurant = false
}
class TravelerType: Object {
dynamic var single = false
dynamic var couple = false
dynamic var group = false
dynamic var family = false
}
使用Leaks
中的Instruments
工具,我发现有大量泄漏,所有这些都与此几乎完全相同。创建一个对象的新实例以分配给模型中的对象。
以下是一些详细说明这些泄漏的图片。
我在我的应用中创建了Objects
的新实例,以用作模型,但99.99%的时间我不会持久保存我正在创建的模型。我使用这些作为基本模型来填充单元格等。理论上,它们应该在完成后被释放。
我真的不确定我做错了什么,因为我的所有泄漏都是因为Realm Objects。几乎好像我用于数据的所有模型都没有在离开视图控制器时被释放。
我应该手动执行此操作吗?我已经阅读了一些关于autoreleasepools和realm.invalidate的评论,但我不确定这是否适合我的情况。
当我创建一个Object实例以分配给另一个Object中的变量时 - 我是否需要做一些特别的事情来确保它正确解除分配?
非常感谢你的帮助。