iOS swift 3中的内存泄漏
Posted
技术标签:
【中文标题】iOS swift 3中的内存泄漏【英文标题】:Memory Leak in iOS swift 3 【发布时间】: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循环来解析字典。 【参考方案1】:在您的情况下,您正在使用 for 循环来解析字典。所以,你可以使用autorelease
在for循环中释放内存
把这个写在for循环里面,每次调用循环都会释放内存。
autoreleasepool
/* code */
【讨论】:
以上是关于iOS swift 3中的内存泄漏的主要内容,如果未能解决你的问题,请参考以下文章
将文本分配给UILabel(iOS,Swift 4,Xcode 9)时内存泄漏