分配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];
}
答案 0 :(得分:1)
只要你记得在-dealloc
中解除分配,就不应该泄漏。