Как cellForRowAtIndexPath может повторно использовать средства форматирования (для улучшения прокрутки)? - PullRequest
0 голосов
/ 28 ноября 2010

Выделение NSDateFormatter (или NSNumberFormatter) является относительно медленным, и
cellForRowAtIndexPath выполняется для каждой ячейки.
Таким образом, выделение форматеров в cellForRowAtIndexPath может внести существенный вклад в прерывистую прокрутку.

Чтобы сгладить прокрутку, я попытался выделить их вне cellForRowAtIndexPath,
, сделав их переменной класса, выделив их в viewWillAppear и освободив их в viewWillDisappear (см. Код ниже).
Но это приводит к утечкам вформатеры.

Где лучшее место для объявления / выделения / выпуска средств форматирования, используемых в cellForRowAtIndexPath?

//in myNavigationViewController.m:
NSDateFormatter *myDateFormatter;                            

-...viewWillAppear...{                       
    if(myDateFormatter){                    //Solution: add this check.
        [myDateFormatter release];
    }
    myDateFormatter = [[NSDateFormatter alloc] init];                          
    [myDateFormatter setDateStyle:NSDateFormatterShortStyle];
    [myDateFormatter setTimeStyle:NSDateFormatterShortStyle];
    if(locale){                             //Solution: add this check.
        [locale release];
    }
    locale = [NSLocale currentLocale];
    [myDateFormatter setLocale:locale];       
}
-...cellForRowAtIndexPath... {
    cell.myDateLabel.text =  [myDateFormatter stringFromDate:_date];            
}

-...viewWillDisappear...{  
//    [myDateFormatter release];             //Solution: remove this line 
}
-...dealloc {
    [myDateFormatter release];               //Solution: add these 2 lines.
    [locale release];
}

1 Ответ

1 голос
/ 28 ноября 2010

Это не должно протекать вообще, если вы помните, чтобы освободить его в -dealloc.

...