gpt4 book ai didi

使用 NSJSONSerialization 时 Swift 泄漏

转载 作者:搜寻专家 更新时间:2023-10-30 23:01:58 25 4
gpt4 key购买 nike

我想为 NSDictionary 写一个扩展,这样我就可以很容易地从数据中创建它。我是这样写的:

extension Dictionary {
init?(data: NSData?) {
guard let data = data else { return nil }
// TODO: This leaks.
if let json = (try? NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions())) as? Dictionary {
self = json
}
else { return nil }
}
}

无法找出泄漏的原因。有什么想法吗?

最佳答案

在我的案例中,当我试图从中获取子词典时,问题出在该词典的后期使用中。在此代码中准确地说:

var location: CLLocation? = nil
if let geometryDictionary = json["geometry"], locationDictionary = geometryDictionary["location"], latitude = locationDictionary["lat"] as? CLLocationDegrees, longitude = locationDictionary["lng"] as? CLLocationDegrees {
location = CLLocation(latitude: latitude, longitude: longitude)
}

问题是我收到了 geometryDictionary 和 locationDictionary 引用但没有指定它们的类型,因此编译器假定它们是 AnyObject。我仍然能够像从字典中获取它们的值,所以代码有效。当我向它们添加类型时,泄漏就停止了。

var location: CLLocation? = nil
if let geometryDictionary = json["geometry"] as? [String : AnyObject], locationDictionary = geometryDictionary["location"] as? [String : AnyObject], latitude = locationDictionary["lat"] as? CLLocationDegrees, longitude = locationDictionary["lng"] as? CLLocationDegrees {
location = CLLocation(latitude: latitude, longitude: longitude)
}

关于使用 NSJSONSerialization 时 Swift 泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36533726/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com