我使用SwiftyJSON 2.3.0的JSON解析在我的雨燕2.0的项目:调试NSJSONSerialization内存泄漏
extension NSData {
func JSONDict() -> Dictionary<String, AnyObject>? {
do {
return try NSJSONSerialization.JSONObjectWithData(self, options: NSJSONReadingOptions(rawValue: 0)) as? Dictionary<String, AnyObject>
} catch let error as NSError {
DLog("NSData: error converting data to JSON: \n\(self.asString)\nerror: \n\(error)")
return nil
}
}
}
class NetworkOperation {
lazy var defaultCompletionHandler: NSURLSessionCompletionHandler = { [weak self] (data, response, error) in
guard let s = self where !s.cancelled else {
return
}
if let httpResponse = response as? NSHTTPURLResponse {
switch httpResponse.statusCode {
case 200..<300:
s.successResponse(data, response: response, error: error)
// ...
}
} else {
// ...
}
}
func successResponse(data: NSData!, response: NSURLResponse!, error: NSError!) {
DLog("NetworkOperation: '\(name!)' finished")
if let jsonDict = data.JSONDict() {
let json = JSON(jsonDict)
// process JSON
}
}
}
一切工作正常,但我的应用程序似乎每次解析JSON时泄漏了大量的内存。我试着做用仪器分析代,这里是它表明:
好像NSJSONSerialization.JSONObjectWithData
是原因。但是,泄漏的内存块是malloc_zone_malloc
/malloc_zone_calloc
(即不是ARC管理的),所以我看不到引用计数。
如何继续调试此问题?
你肯定有很多东西在里面:延伸,懒惰,[弱自我],财产中的封闭,是否能让生活更容易理解? [Brian Kernighan](https://en.wikipedia.org/wiki/Brian_Kernighan):*每个人都知道,调试比编写程序要困难一倍。所以,如果你写的时候你的聪明才智,你将如何去调试它?* [Kent Beck](https://en.wikipedia.org/wiki/Kent_Beck):*做最简单的事情可能工作*。 – zaph
@ zaph是的,我知道,它太复杂了:)但我有一个借口,这个代码的主要部分不是我自己创作的,我没有时间重构它。 –