項目中需要根據不同情況給XMLParser指配不同的代理方法,因此我把代理方法分別寫成兩個遵循XMLParserDelegate協議的類(下面簡稱ParserDelegate)。然后我按照正常流程初始化,大致如下:
init(...) {
...
self.parser = XMLParser(url: url)!
let delegate = ParserDelegate() //引起錯誤
self.parser.delegate = delegate
print(delegate)
print(self.parser.delegate)
super.init()
...
}
兩個print
都能打印出正確的值,parser
也不為空,但一旦執parser.parse()
方法就會報EXC_BAD_ACCESS
錯誤,這個錯大概是指針指向空對象引起的。最后我發現問題出在這句let delegate = ParserDelegate()
,然后在我把這個代理作為此類的一個屬性后,問題解決。原因是初始化結束后這個代理被自動釋放了。