【发布时间】:2017-07-16 17:31:44
【问题描述】:
我最近开始使用 Swift 并学习 内存管理。而且我无法解决这个内存泄漏问题。
这是我的模型类:
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()
}
}
虽然我在 Contact 模型中将 weak 用于 Address,并在“fetchContact()”的闭包中使用了“[weak self]”控制器中的方法,同时获取数据以避免保留周期。但是我仍然在 line : "self?.append?.append(contact)" 中收到内存泄漏警告。 我在 Xcode 8.3.3 中观察到仪器的泄漏。
我很困惑为什么在控制器类中仍然有强引用联系人。
【问题讨论】:
-
为了获取所需的数据,您是否使用任何 for 循环?
-
是的,我用for循环来解析字典。
标签: ios swift3 memory-leaks xcode8