您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]
自己。
来源
2013-04-15 17:40:58
Rob
在你的雇主类方法中,你试图直接访问'_employers'伊娃。我不认为你可以用类方法做到这一点。或者是暗示他让'_employers'成为全球性的? – Rob
你说得对。我尝试尽可能少修改问题中包含的版本,所以我想_employers是某种静态或全局变量。 –