我想要只应初始化一次并返回一些第一次计算的值。低于正确的方法吗?
@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;
}
答案 0 :(得分:3)
没有
thisClass
是一个局部变量。这意味着,每次调用+userAgentString
时,该值都将被重置(为垃圾)。至少使它成为static
。
self
的含义不是您在类方法中所期望的。你的意思是thisClass
?
即使进行了上述修复,该方法也不是线程安全的,可能会也可能不会。
请参阅Create singleton using GCD's dispatch_once in Objective C和Singleton in iOS 5?作为正确构建单身的示例。
答案 1 :(得分:0)
一对夫妇的变化。首先,thisClass
应该是静态的。其次,静态方法中没有self
指针,所以你应该在那里使用thisClass
。像这样:
+ (NSString *) userAgentString
{
static UserAgent *thisClass;
if(thisClass == nil)
{
thisClass = [[UserAgent alloc] init];
}
if (thisClass.userAgent == nil)
{
return @"not initialized";
}
return thisClass.userAgent;
}
此外,更好的方法可能是使用Singleton,如评论者所述。
答案 2 :(得分:0)
http://www.galloway.me.uk/tutorials/singleton-classes/
这很有用。谢谢@Inafziger