我使用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是的,我知道,它太複雜了:)但我有一個藉口,這個代碼的主要部分不是我自己創作的,我沒有時間重構它。 –