UISearchDisplayController - 2tchのバグの原因判明(たぶん)
2tchで,使っていると検索バーとnavigation barが消えうせるというバグレポートが寄せられていたのだが,ようやく原因が判明した.
・原因
原因は,残りメモリ量の警告が飛んでくると,UITableViewのheaderViewに自動的にnilがセットされることだった.
バグレポートを12月にバグレポートを多くユーザから頂き,Webブラウザを使うとよく起こるという報告が多かったことから,メモリ周りを疑い判明した.
・誤動作?
どうして長い間発覚しなかったかというと,2tchは一切InterfaceBuilderを使っていない.このため,スレッドやスレタイビューでは,UISearchDisplayControllerを自前でallocして使っている.iOSがheaderViewにnilをセットすると,UISearchDisplayControllerに含まれるUISearchBarのインスタンスにautoreleaseを投げておけば,メモリ警告時に自動的にインスタンスが開放されることになるが,2tchではインスタンスが開放されずに残ることになる.(ちなみにこれらのインスタンスはビューコントローラの破棄時に開放される)
このため,UISearchDisplayControllerのUISearchBarのインスタンスはずっと残ることになり,非表示になった後でも,メソッドを読んだり,参照してもエラーが発生せずに動作していたのだ・・・・・.
・対処
メモリ警告時に適切に動作するようにすればよい.
なかなかにこの仕様には気付かなかった・・・・.