NSTimerその後2

NSTimerは使わない方針にしたのに、エラーが発生した。
アプリ内で、いくつかのUIViewControllerを生成し、現在表示中のviewをcurrentViewとして保持するようにしていた。
で、

if([currentView superview]){
  [currentView removeFromSuperview];
}

ってやってたら、「おめーな、NSCFSetにsuperviewなんてメソッドねーんだよ」って実行時エラーで怒られた。は?ですよ。
UIViewのインスタンス変数にメソッド呼び出ししてんねんけど、なんでNSCFSetなんて使ってないクラス名で言われんのかさっぱり。
NSTimerをインスタンス変数につっこんでたときも同じような実行時エラーがでたことがある。そんときゃ、「NSCFDictionaryにinValidなんてメソッド(ry」だった。

これって、どうなんだろう。
Objective-C2.0から、retainが何もしなくなって、ガベージコレクタが有効になっているんだけども、

  • ガベージコレクタが動作して、currentViewが指してたviewのアドレスが変更になった
  • それにもかかわらず、currentViewが古いアドレスを指しているから、実行時エラーになった

ってことなんだろうか、、、。


[追記]
○○Viewというクラスは、親Viewに追加されていない場合には解放されてしまうことがあるということらしい。