years.text = [NSString stringWithFormat:@"%0.1f", theScroller.contentOffset.y];
избавит от необходимости явно освобождать строку, так как она автоматически высвобождается.
Однако, если вы пытаетесь избежать замедления, рассмотрите возможность обновления поля реже. Например, каждый раз, когда вызывается scrollViewDidScroll
, установите таймер для обновления поля, скажем, через 0,1 секунды, но не в том случае, если таймер уже запущен после предыдущего вызова. Это уменьшает количество вызовов при сохранении обновленного интерфейса.
Вот пример, как вы могли это сделать. Объявите 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
в качестве временного интервала, вы можете попробовать сделать его быстрее или медленнее и посмотреть, что работает лучше.
Обратите внимание, что этот пример завершен в том, что касается управления памятью. Вы не должны пытаться самостоятельно сохранять или освобождать объект таймера. Его время жизни обрабатывается внутренним циклом запуска.