在类似日历的应用程序或应用程序的一部分中,我需要在许多例程中使用(格里高利)日历,这意味着我需要多次使用alloc-init并释放相同的NSCalendar对象。我应该在我的长持久控制器实例中保留一个NSCalendar(比如格里高利历)作为ivar(@property(nonatomic,retain)
)吗?
或者它的实例方法是重入/线程安全的吗?
答案 0 :(得分:7)
一般情况下,你应该保留日历和日期格式化程序,因为它们第一次创建和/或使用起来很昂贵(我发现这很难)。
但是,Thread Safety Summary将NSCalendar和NSFormatter(NSDateFormatter的超类)列为“Thread-Unsafe”,并说:
以下类和函数通常不是线程安全的。在大多数情况下,只要您一次只使用一个线程,就可以从任何线程使用这些类。查看课程文档以获取更多详细信息。
我建议寻找两种方法。这是使用NSThread自己创建线程的一个优点:您可以将每个线程的日历存储在thread dictionary中。
否则,您只需每次创建并丢弃每个日历并支付性能成本。