代码之家  ›  专栏  ›  技术社区  ›  Nimrod

NSFetchedResultsSectionInfo name的NSDateFormatter

  •  0
  • Nimrod  · 技术社区  · 14 年前

    - (NSString *)formattedDay {
        NSDateFormatter *df = [[NSDateFormatter alloc] init];
        [df setTimeStyle:NSDateFormatterNoStyle];
        [df setDateFormat:@"EEEE MMMM d, YYYY"];
        NSString *dateString = [df stringFromDate:self.timestamp];
        [df release];
        return dateString;
    }
    

    sectionNameKeyPath:@"formattedDay" 在我的NSFetchedResultsController中。

    这样做很好,但效率有点低,因为必须为每个日志行格式化字符串。有没有办法让我返回NSDate(而不是字符串),然后以某种方式访问titleForHeaderInSection中的NSDate:

    - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
        id <NSFetchedResultsSectionInfo> sectionInfo = [[self.fetchedResultsController sections] objectAtIndex:section];
        return sectionInfo.name;
    }
    

    1 回复  |  直到 14 年前
        1
  •  1
  •   aegzorz    14 年前

    根据我的经验,多次分配NSDateFormatters是非常昂贵的,因此您可以尝试将其创建为单例:

    - (NSString *)formattedDay {
        static NSDateFormatter* sharedFormatter = nil;
        if( sharedFormatter == nil ) {
            sharedFormatter = [[NSDateFormatter alloc] init];
            [sharedFormatter setTimeStyle:NSDateFormatterNoStyle];
            [sharedFormatter setDateFormat:@"EEEE MMMM d, YYYY"];
        }
        return [sharedFormatter stringFromDate:self.timestamp];;
    }
    

    这当然会泄露您的NSDateFormatter,因此如果您太迂腐,则必须从其他静态方法中释放实例:)