と呼ばれるクラスがありますRunningInteger
。これは、別のスレッドで (メイン スレッドをブロックしないようにするため)、1 から 60 までの整数 ivar を 1 秒間隔でループします。したがって、ループ全体に約 1 分かかります。ivar は、メソッドまたは読み取り専用プロパティを介して外部に提供されます。
NSView
それ自体を表示できる 60 の異なるモードを持つカスタムサブクラスがあります。
今、これは私が達成したいことです:
インターフェイスにボタンがあります。クリックすると、つまりそのアクション メソッド内で、 の新しいインスタンス
RunningInteger
が作成され、ビューはこのインスタンスの ivar に従って描画されます。ただし、これが問題です。ボタンをもう一度クリックすると、それに応じてアニメーションがリセットされ、最初からやり直す必要があります。これはスレッド セーフである必要があり、メモリ リークはなく、スレッドがスタックすることもありません。
これを達成する方法についてのアイデアはありますか?
これと密接に関連する (おそらく他の多くの) 問題が 2 つあります。
明らかに、スレッドが 60 秒後に消えることがわかっていても、スレッドをスタックし続けるのは良い設計ではありません。結局のところ、60 秒が 1 時間だったらどうでしょうか。(その可能性はあります。)
get の最近作成されたインスタンスのみがビューの表示を更新するようにするにはどうすればよいでしょうか
RunningInteger
(setNeedsDisplay:YES)。