Iphone 静态方法目标c-init一次
我想创建一个只需初始化一次并返回第一次计算的值的类。以下是正确的方法吗Iphone 静态方法目标c-init一次,iphone,objective-c,ios,alloc,Iphone,Objective C,Ios,Alloc,我想创建一个只需初始化一次并返回第一次计算的值的类。以下是正确的方法吗 @property (nonatomic, retain) NSString *userAgent; @implementation UserAgent @synthesize userAgent = _userAgent; + (NSString *) userAgentString { UserAgent *thisClass; if(self == nil) { thisC
@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;
}
一些变化。首先,
此类
应该是静态的。第二,在静态方法中没有self
指针,因此应该在那里使用thisClass
。像这样:
+ (NSString *) userAgentString
{
static UserAgent *thisClass;
if(thisClass == nil)
{
thisClass = [[UserAgent alloc] init];
}
if (thisClass.userAgent == nil)
{
return @"not initialized";
}
return thisClass.userAgent;
}
另外,一个更好的方法可能是使用一个单例,正如一位评论者所提到的。。首先,
此类
应该是静态的。第二,在静态方法中没有self
指针,因此应该在那里使用thisClass
。像这样:
+ (NSString *) userAgentString
{
static UserAgent *thisClass;
if(thisClass == nil)
{
thisClass = [[UserAgent alloc] init];
}
if (thisClass.userAgent == nil)
{
return @"not initialized";
}
return thisClass.userAgent;
}
另外,一个更好的方法可能是使用单例,正如一位评论者所提到的。否
此类
是一个局部变量。这意味着,每次调用+userAgentString
时,该值都将被重置(为垃圾)。至少将其设置为静态
self
的含义不是您在类方法中所期望的。你是说这门课吗此类
是一个局部变量。这意味着,每次调用+userAgentString
时,该值都将被重置(为垃圾)。至少将其设置为静态
self
的含义不是您在类方法中所期望的。你是说这门课吗这很有效..感谢@Inafziger搜索有关singleton's的信息,获得了一个很好的示例,说明了如何执行此操作。在UserAgent*这个类之前添加static,您应该会很好<代码>静态用户代理*thisClass代码>搜索singleton上信息的可能重复项,这是一个很好的示例,说明了如何执行此操作。在UserAgent*thisClass之前添加static,您应该可以<代码>静态用户代理*thisClass代码>可能重复的@i_raqz:与的第一个答案相同。@i_raqz:与的第一个答案相同。