我正在編寫我自己的包裝類來解析XML數據。通常我會使用泄漏性能工具通過忘記釋放分配的內存來檢測懷疑行爲。 此時我發現下面的代碼(第一行被工具標記)給我帶來了巨大的內存泄漏(XML數據文件變得越大泄漏越多)。 以下部分用於接收節點內的文本。爲什麼我使用xmlTextReaderConstValue獲取內存泄漏?
NSString *currentTagValue = [NSString stringWithCString:(char *)xmlTextReaderConstValue(XMLReader) encoding:NSUTF8StringEncoding];
SEL selector = NSSelectorFromString([NSString stringWithFormat:@"set%@:", [currentTag capitalizedString]]);
[currentItem performSelector:selector withObject:currentTagValue];
如果我添加
[currentTagValue release]
內存泄漏都不見了。
這對我來說似乎很奇怪,因爲我沒有手動爲NSString分配內存。這就是爲什麼我認爲它會被自動釋放。 如果我將上面的代碼示例與負責獲取節點名稱的部分進行比較,則整個情況會變得很奇怪。
NSString *currentTagName = [NSString stringWithCString:(char *)xmlTextReaderConstName(XMLReader) encoding:NSUTF8StringEncoding];
SEL selector = NSSelectorFromString([NSString stringWithFormat:@"set%@:", [currentTagName capitalizedString]]);
在這裏我不必添加手動釋放,一切工作正常,我得到沒有內存泄漏。 我不確定我描述的問題是否是xml ... ConstValue函數(工作部分使用xml ... ConstName)的副作用,或者之後的原因是執行選擇器。
感謝您的閱讀,希望任何人都可以向我解釋。
我確定這是重點。該應用程序不會因此泄漏而崩潰。感謝您的文檔鏈接。 – TRD 2011-04-05 07:26:33
不客氣。很高興我幫了忙。 :) – Altealice 2011-04-05 07:38:03