objective-c - +(void)initialize方法中的alloc-init对象可以多次重用

标签 objective-c ios code-reuse lazy-initialization

我多次使用NSDateFormatter对象(针对特定目的定制)。由于我不是objc专家,因此我想出了三种不同的方法来处理它。

在第一个中,我创建了一个NSDateFormatter类别并在那里自定义了代码。这是常见的方法,但是每次创建此类对象时,都会将其放入主自动释放池中。我认为这种行为对非ARC和ARC代码均有效。

相反,在第二篇文章中,我重写了+(void)initialize方法,并将自定义代码放在此处。这里有个简单的例子:

static NSDateFormatter* dateFormatter = nil;

+(void)initialize
{
    dateFormatter = [[NSDateFormatter alloc] init];
    // other code here
}

最后,我通过以下属性通过延迟加载实例设置了第三种方法:
-(NSDateFormatter)dateFormatter
{
    if(dateFormatter) return dateFormatter;        
    // alloc-init here
}

这样说,我想知道哪种方法最适合多次处理对象,以及以这种方式使用+(void)initialize是否正确。

先感谢您。

最佳答案

后面两种方法都是正确的,但是我相信您希望将它们放在一起!

static NSDateFormatter *sharedInstance = nil;

+ (NSDateFormatter *)sharedInstance {
    if (sharedInstance == nil) {
        sharedInstance = [[NSDateFormatter alloc] init];
    }
    return sharedInstance;
}

注意:此类称为单例。 Read more

关于objective-c - +(void)initialize方法中的alloc-init对象可以多次重用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10515151/

相关文章:

open-source - 黑鸭子/Ohloh 类似工具

ios - 我是否在 DFImageManager 中正确使用了 requestImageForRequest?

objective-c - 使用 NSInterger 值对 NSMuatbleArray 进行排序

ios - 我们如何使用 Watchkit Touch 事件?

ios - 自定义 UICollectionViewCell 中的 UIScrollview 不工作

charts - 使用可重用图表更新 d3.js 中的 HTML 表格

mysql - 重新使用sql server中现有的选定列?

objective-c - 为什么在使用 [NSDate date] 时 ARC 不释放内存但使用 [[NSDate alloc] init] 却工作正常?

ios - UISearchController 在索引路径上崩溃

ios - 如何在我的应用程序中使用 Safari 的输入文件选择器?