mem*_*ons 2 iphone cocoa-touch objective-c nsdateformatter ios
我需要格式化日期和时间tableView:cellForRowAtIndexPath:.由于创建NSDateFormatter一个相当繁重的操作,我已经使它们变得静态.这是以行为单位格式化日期和时间的最佳方法吗?
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
MyCell*cell = (MyCell*)[self.tableView
dequeueReusableCellWithIdentifier:CellIdentifier
forIndexPath:indexPath];
static NSDateFormatter *dateFormatter = nil;
if (!dateFormatter)
{
dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setLocale:[NSLocale currentLocale]];
[dateFormatter setDateStyle:NSDateFormatterLongStyle];
}
cell.dateLabel = [dateFormatter stringFromDate:note.timestamp];
static NSDateFormatter *timeFormatter = nil;
if (!timeFormatter)
{
timeFormatter = [[NSDateFormatter alloc] init];
[timeFormatter setTimeStyle:NSDateFormatterShortStyle];
}
cell.timeLabel = [timeFormatter stringFromDate:note.timestamp];
return cell;
}
Run Code Online (Sandbox Code Playgroud)
我不会使用静态变量,因为那时你几乎肯定会遇到内存泄漏.相反,我会NSDateFormatter *在该控制器对象上使用两个实例变量或属性,这些变量或属性仅在需要时实例化.当视图卸载或控制器被释放时,您可以释放它们.
例如:
@interface MyViewController : UITableViewController {
NSDateFormatter *dateFormatter;
NSDateFormatter *timeFormatter;
}
@end
@implementation MyViewController
- (void)viewDidUnload {
// release date and time formatters, since the view is no longer in memory
[dateFormatter release]; dateFormatter = nil;
[timeFormatter release]; timeFormatter = nil;
[super viewDidUnload];
}
- (void)dealloc {
// release date and time formatters, since this view controller is being
// destroyed
[dateFormatter release]; dateFormatter = nil;
[timeFormatter release]; timeFormatter = nil;
[super dealloc];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
// ...
// if a date formatter doesn't exist yet, create it
if (!dateFormatter) {
dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setLocale:[NSLocale currentLocale]];
[dateFormatter setDateStyle:NSDateFormatterLongStyle];
}
cell.dateLabel = [dateFormatter stringFromDate:note.timestamp];
// if a time formatter doesn't exist yet, create it
if (!timeFormatter) {
timeFormatter = [[NSDateFormatter alloc] init];
[timeFormatter setTimeStyle:NSDateFormatterShortStyle];
}
cell.timeLabel = [timeFormatter stringFromDate:note.timestamp];
return cell;
}
@end
Run Code Online (Sandbox Code Playgroud)