您employers
的类方法正在引用_employers
,这可能是您的类的实例变量。你不能这样做。此外,即使你做了一些草率的解决方法,比如全局变量,你也不能保证_employers
已经实例化,除非employers
类方法也确保sharedHelper
调用了。
所以,有几个想法:
你真的应该有一些类属性employers
(我假设你有,但为简洁起见省略了它,但让我们在此处包含它以消除歧义):
@interface MyHelper : NSObject
@property (nonatomic, strong) NSMutableArray *employers;
@end
我想你的init
方法会初始化这个employers
对象
- (id)init
{
self = [super init];
if (self) {
_employers = [[NSMutableArray alloc] init];
}
return self;
}
您现有的sharedHelper
方法非常好。
但是,如果您要使用employers
类方法,则应访问employers
实例方法:
+ (NSMutableArray *)employers
{
return [[MyHelper sharedHelper] employers];
}
完成所有这些后,您的课程将如下所示:
@interface MyHelper : NSObject
@property (nonatomic, strong) NSMutableArray *employers;
+ (id)sharedHelper;
+ (NSMutableArray *)employers;
@end
@implementation MyHelper
+ (id)sharedHelper
{
static MyHelper *sharedHelper = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken,^{
sharedHelper = [[self alloc] init];
});
return sharedHelper;
}
- (id)init
{
self = [super init];
if (self) {
_employers = [[NSMutableArray alloc] init];
}
return self;
}
+ (NSMutableArray *)employers
{
return [[MyHelper sharedHelper] employers];
}
@end
这行得通,但话虽如此,但就风格而言,我个人不推荐使用类方法,employers
如果您有一个用于同名属性的 getter 方法。似乎有点混乱。我将删除employers
该类方法,并坚持使用将为您合成的标准 getter 方法,从而得到:
@interface MyHelper : NSObject
@property (nonatomic, strong) NSMutableArray *employers;
+ (id)sharedHelper;
@end
@implementation MyHelper
+ (id)sharedHelper
{
static MyHelper *sharedHelper = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken,^{
sharedHelper = [[self alloc] init];
});
return sharedHelper;
}
- (id)init
{
self = [super init];
if (self) {
_employers = [[NSMutableArray alloc] init];
}
return self;
}
@end
然后使用这个类的其他代码MyHelper
可以简单地引用[[MyHelper sharedHelper] employers]
自己。