我试图创建一个单身人士。这组代码用于建立settingsMAnager单例。
我试图分配它但继续抛出错误
它抛出错误没有与NSObject可见的@接口。 声明选择器' alloc'
有人能看出错误吗?
提前致谢!
//In my .h file I have
+(settingsManager*)getInstance;
-(void)printSettings;
//In My .m file is----
static settingsManager *theInstance = nil;
//Instance Method
+(settingsManager*)getInstance
{
(theInstance == nil)
{
[[self alloc] init];//Im getting "expression result unused" here
}
return theInstance;
}
-(id)alloc
{
theInstance = [super alloc];<------//getting the big error here
return theInstance;
}
-(id)init
{
if (self = [super init])
{
}
return self;
}
(void)printSettings
{
NSLog(@"Hello");
}
答案 0 :(得分:3)
您永远不应该继承alloc
方法。下面是使用单例的代码:
+ (instancetype)sharedInstance {
static SettingsManager *sharedInstance = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedInstance = [[settingsManager alloc] init];
});
return sharedInstance;
}
如果你对更多阅读感兴趣,我建议你this link。
我还建议您阅读有关objective-c的推荐coding guidelines。
instancetype是一个上下文关键字,可用作结果类型,表示方法返回相关的结果类型。与id不同,instancetype只能用作方法声明中的结果类型。更多详情here。
正如here所述,dispatch_once()是同步的,只允许你执行一段代码。
答案 1 :(得分:0)
这不是right way to implement a singleton。您的实现中有许多单一且有潜在风险的位。但是,这个错误来自alloc
是类方法的事实,而不是您在此处编写的实例方法。