cellForRowAtIndexPath如何重用格式化程序(以改进滚动)?

时间:2010-11-27 21:23:30

标签: iphone objective-c cocoa-touch memory-leaks

分配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 个答案:

答案 0 :(得分:1)

只要你记得在-dealloc中解除分配,就不应该泄漏。