我正在将项目转换为SDK。我需要将几个实例方法转换为类方法。我收到了关于使用" self"的编译器警告。警告是"不兼容的指针类型初始化Store *,表达式为Class。此Store类是singleton sharedInstance。
我在班级商店中有这样的方法:
+ (void) dispatchStoreSource {
__weak Store *ref = self; <--- issue is here
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSError *error = nil;
NSArray *things = [ref fetchThings:&error];
//dispatch back to main queue
if (![ref updateSource:source forUser:user error:&error]) {
dispatch_async(dispatch_get_main_queue(), ^{
result(nil, error);
});
} else {
dispatch_async(dispatch_get_main_queue(), ^{
result(source, nil);
});
}
});
}
解决此问题的正确方法是什么?我应该这样做吗?
__weak Store *ref = [Store sharedInstance];
答案 0 :(得分:2)
您的ref
是指向Store
类对象的指针。但是你的类方法中的self
并不指向类的分配对象(=你的单例),它是你的类,IOW Store
(不是对象,而是Class)。如果你已经实现了sharedInstance
类方法,就像这样......
+ (instancetype)sharedInstance {
static Story *instance;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
instance = [[self alloc] init];
});
return instance;
}
...只需执行此操作ref = [self sharedInstance];
答案 1 :(得分:0)
是的,您应该使用__weak Store * ref = [Store sharedInstance];
否则,让我们使用Store的原始静态参考。
示例:
static Store = _store = nil;
__weak Store * ref = _store;