您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是某種靜態或全局變量。 –