Выделение 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];
}