这些代码之间的区别?

时间:2013-12-27 09:16:45

标签: objective-c

- (NSString *)formattedDate {
    static NSDateFormatter *dateFormatter = nil;

    if (dateFormatter == nil) {
        dateFormatter = [[NSDateFormatter alloc] init];
        [dateFormatter setDateFormat:@"dd.MM.yyyy"];
    }

    NSDate *today = [NSDate date];
    NSString *formattedDate = [dateFormatter stringFromDate:today];

    return formattedDate;
}

- (NSString *)formattedDate {
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"dd.MM.yyyy"];

    NSDate *today = [NSDate date];
    NSString *formattedDate = [dateFormatter stringFromDate:today];

    return formattedDate;
}

两者之间有什么区别,哪一个更好?

3 个答案:

答案 0 :(得分:2)

第一个在开始时有这个:

static NSDateFormatter *dateFormatter = nil;

if (dateFormatter == nil) {
    dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"dd.MM.yyyy"];
}

......所以就是这样。

第二个有这个:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"dd.MM.yyyy"];

......所以它确实如此。

我整个星期都在这里。

让我们先来看看第二个人在做什么。它正在创建一个日期格式化程序,并告诉它需要什么格式的日期。然后它获取该日期格式化程序以格式化当前日期。它每次都执行所有这些步骤。

第二个创建日期格式化程序,但前提是它尚未这样做。它通过将日期格式化程序置于静态变量中而挂起。然后它获取格式化器来格式化当前日期

如果他们只运行一次,他们几乎是一样的;第一个将无限小,因为它必须进行检查。如果它们运行很多次,就会出现差异。第一个运行如下:

Create a date formatter
Format the date
Create a date formatter
Format the date
Create a date formatter
Format the date
...

第二个运行如下:

Check for a date formatter
Create a date formatter
Format the date
Check for a date formatter
Format the date
Check for a date formatter
Format the date
...

创建日期格式化程序是一项非常昂贵的操作,但检查一个不是,所以如果多次调用该函数,第二个版本要快得多

答案 1 :(得分:1)

第一个示例使用静态变量并仅将其初始化为1。 第二个每次初始化dateFormater。 所以第一个例子的表现要好一些。

答案 2 :(得分:1)

发送[self formattedDate]时,

  • 第一个将重复使用dateFormatter(推荐);
  • 第二个将始终为您分配一个新的NSDateFormatter实例。