前两天在项目中遇到一个iOS7的崩溃问题,[UIView release],message send to deallocated instance。一眼看上去像是一个view重复释放引起的崩溃,并且本人只能在iOS7的设备上才能复现这个问题,仔细检查也没能发现是代码哪里出了问题,后来几经周折,终于知道了原因。本人的代码是一个UITableView,而后用一个UISearchBar作为tableview的tableHeaderView,又用到了UISearchDisplayController,因此在deinit(OC中的dealloc)中,需要:
deinit {
self.tableView.tableHeaderView = nil;
self.searchController.searchResultsDelegate = nil;
self.searchController.searchResultsDataSource = nil;
self.tableView.delegate = nil;
self.tableView.dataSource = nil;
}
-(void)dealloc {
self.tableView.tableHeaderView = nil;
self.searchController.searchResultsDelegate = nil;
self.searchController.searchResultsDataSource = nil;
self.tableView.delegate = nil;
self.tableView.dataSource = nil;
[super dealloc];
}
这及有可能是iOS7的bug,不过这下总算是不会引起crash了。
参考:http://blog.ijasoneverett.com/2013/10/ios-7-bugs-message-sent-to-deallocated-instance/
http://stackoverflow.com/questions/18890716/new-uisearhbar-in-ios-7