繁体   English   中英

在Objective-C类别中使用静态变量

[英]Use a static variable inside an Objective-C category

我希望能够做到以下几点:

NSString *hoursAndMinutes = [myNSDateObject formattedTime]; // eg. 10:25

现在我可以在NSDate类上创建一个类别但是由于NSDateFormatter的创建已被证明是非常昂贵的,我想使用我的NSDateFormatter的单个实例。 这是否与类别概念相矛盾,还是有更简洁的方法来实现这一目标?

类别只会让你维护静态变量。 但对于你的实例来说,这将是完美的。

为格式化程序创建一个类别

@interface NSDateFormatter (myFormats)

+ (NSDateFormatter*) specialFormatting;

@end

实施文件

@implementation NSDateFormatter (myFormats)

+ (NSDateFormatter*) specialFormatting{
    static NSDateFormatter *_specialFormatting;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        _specialFormatting = [[NSDateFormatter alloc] init];
        // Continue Setting up this format;
    });
    return _specialFormatting;
}

@end

然后一定要在你想要使用它的地方包含你的标题(我使用prefix.pch文件来包含我一直使用的东西)

那么你不需要声明它并且可以从它所在的地方使用它。 每次需要时都不会创建该项目..

该对象永远不会被释放。 但无论如何,这就是你的愿望。 因为它仍然可访问它不是内存泄漏。

您还可以提供帮助方法,以便您只返回字符串。

希望有所帮助。

您可以使用静态变量(在文件范围或方法范围内),也可以将NSDateFormatter包装在单例中以从类别中使用。

我不会说这与类别的概念相矛盾,但对于许多程序员而言,使用静态变量或单例并不总是最好的事情。

您也可以在方法内创建静态变量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM