项目中需要根据不同情况给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()
,然后在我把这个代理作为此类的一个属性后,问题解决。原因是初始化结束后这个代理被自动释放了。
网友评论