クラスMotionStreakのivarを持つクラスTouchInfoがあります。親オブジェクトがdeallocされた後にivarのリリースが遅れる
@interface TouchInfo : NSObject {
MotionStreak *streak;
}
...
@end
このクラスは、基本的にタッチイベントを処理し、タッチに続くモーションスジを描画します。ユーザーが指を離したときに特定のタッチに関連付けられているTouchInfo
のインスタンスを解放したいが、フェードアウトする前にモーションスジークを0.5〜1.0秒間残しておきたいので、dealloc
にstreak
ivarをリリースすることはできない方法はTouchInfo
クラスです。
私は次のようにカスタムのTimerクラスを使用して、streak
IVARの放出を遅延するためにタイマーを使用しています:
- (void)dealloc {
[self timedReleaseStreak];
[super dealloc];
}
- (void)timedReleaseStreak {
[streak fadeoutWithDelay:1.0];
[[TimerHandler sharedTimer] object:streak action:@selector(release) delay:1.0];
}
これまでのところ、それは任意のクラッシュせずに動作します。しかし、私はこれを間違ってやっているのかどうか、またそれを行うためのより良い方法と推奨される方法があるのだろうかと思います。ご意見をお聞かせください。
p/s:ARCに関するアドバイスはありません。 P
私は他のオブジェクト(タッチされたビュー)に責任を与えることはおそらくより安全だろうと思いましたか? – jbat100