years.text = [NSString stringWithFormat:@"%0.1f", theScroller.contentOffset.y];
自動解放されるため、文字列を明示的に解放する必要がなくなります。
ただし、速度低下を避けたい場合は、フィールドの更新頻度を下げることを検討してください。たとえば、scrollViewDidScroll
呼び出されるたびにタイマーを設定して、たとえば 0.1 秒後にフィールドを更新しますが、タイマーが以前の呼び出しから既に実行されている場合はそうではありません。これにより、UI を最新の状態に保ちながら、呼び出しの数を減らすことができます。
これを行う方法の例を次に示します。スクロール ビュー デリゲートのインターフェイス宣言NSTimer
で を宣言します。
NSTimer *timer;
そして方法:
- (void)updateYear:(NSTimer*)theTimer
{
timer=nil;
UIScrollView *theScroller=[theTimer userInfo];
years.text=[NSString stringWithFormat:@"%0.1f", theScroller.contentOffset.y];
}
- (void)scrollViewDidScroll:(UIScrollView *)theScroller
{
if (!timer) {
timer=[NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(updateYear:) userInfo:theScroller repeats:NO];
}
}
明らかに、時間間隔として使用する必要はありません0.1
。速くしたり遅くしたりして、何が最適かを確認できます。
この例は、メモリ管理に関する限り完全であることに注意してください。タイマー オブジェクトを自分で保持または解放しようとしないでください。その存続期間は、runloop によって内部的に処理されます。