NSDateFormatter 开销

NSDateFormatter expense

DateFormatters creation/modification 有多贵? 创建 4 个略有不同的 DateFormatter 或修改单个 DateFormatter 是否更便宜?

依稀记得修改DateFormatters 与修改 GL 上下文一样昂贵(即:非常)。

关于该主题的讨论已过时 Why is allocating or initializing NSDateFormatter considered "expensive"?

NSDateFormatter 的缺点是创建新实例或设置格式和语言环境的成本。实际上这些操作是 iOS SDK 上最慢的操作之一,您真的必须避免它。 Read this article to understand more about expensive objects like NSDateFormatter

func testPerformanceExampleUpdateFormat() {
    self.measure {
        (0...1_000).forEach { _ in
            let df = DateFormatter()
            df.dateFormat = "MMM yyyy"
            let formattedDate1 = df.string(from: Date())
            df.dateFormat = "MM/dd/yyyy"
            let formattedDate2 = df.string(from: Date())
        }
    }
}

func testPerformanceExampleNewInstance() {
    self.measure {
        (0...1_000).forEach { _ in
            let df1 = DateFormatter()
            df1.dateFormat = "MMM yyyy"
            let df2 = DateFormatter()
            df2.dateFormat = "MM/dd/yyyy"
            let formattedDate1 = df1.string(from: Date())
            let formattedDate2 = df2.string(from: Date())
        }
    }
}
  • 格式更新1000次结果时间:0.0896秒

  • 创建新实例1000次结果时间:0.138秒

一个型号有多贵?

func testPerformanceExample() {
    self.measure {
                    (0...1_000).forEach { _ in
            let int = DateFormatter()
        }
    }
}

结果时间为0.0017秒。对于 DateFormat

的 1000 个实例

让我们将它与其他类型进行比较:

0.000883 s. for 1 000 instances of Int; // let int = 2

0.000814 s. for 1 000 instances of String; // let str = String("Hello")

0.00118 s. for 1 000 instances of Date; // let date = Date()

0.0784 s. for 1 000 instances of UITableViewController; let vc = UITableViewController()

0.246 s. for 1 000 instances of UITableView; // let tv = UITableView()

贵吗?