我想只应该初始化一次的类,并返回一些第一次计算的值。下面是正确的方法吗?

@property (nonatomic, retain) NSString *userAgent;

@implementation UserAgent
@synthesize userAgent = _userAgent;


+ (NSString *) userAgentString
{
    UserAgent *thisClass;
    if(self == nil)
    {
        thisClass = [[UserAgent alloc] init];
    }

    if (thisClass.userAgent == nil)
    {
        return @"not initialized";
    }

    return thisClass.userAgent;
}

最佳答案

没有。


thisClass是局部变量。这意味着,每次调用+userAgentString时,该值都会重置(以清除垃圾)。至少将其设为static
self的含义不是您在类方法中所期望的。您是说thisClass吗?
即使进行了上述修复,该方法也不是线程安全的,这可能会也可能不会。


请参见Create singleton using GCD's dispatch_once in Objective CSingleton in iOS 5?作为示例来正确构造单例。

关于iphone - 静态方法 objective-c -一次初始化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10401985/

10-12 07:17