以更聪明的方式从singleton中检索数据?

时间:2012-05-26 11:59:54

标签: objective-c ipad singleton

我的GameStateSingleton中有一些游戏数据,我不希望每次都使用[[GameStateSingleton sharedMySingleton]getVariable]明确检索,所以我问自己是否可以这样做:

在我班级的界面文件GameLayer中,我设置了sharedHealth等属性和变量。

@interface GameLayer : CCLayer
{
    int sharedHealth;

}
@property (nonatomic,assign) int sharedHealth; 

当然在实现中合成它。

@synthesize sharedHealth;

在GameLayer的初始化中,我想做类似的事情:

sharedHealth = [self getCurrentHealth];

并添加相应的方法

-(int)getCurrentHealth{
   int myHealth = [[GameStateSingleton sharedMySingleton]getSharedHealth];
   return myHealth;
}

这可能吗?根据我的经验,我似乎只是崩溃了。我如何实现我的目标,并不总是必须调用long方法,因为它总是检索相同的变量?必须有一个解决方案......

2 个答案:

答案 0 :(得分:2)

您不需要实例变量。你可以写一个像这样的快捷函数:

- (int)sharedHealth {
    return [[GameStateSingleton sharedMySingleton] getSharedHealth];
}

无论您需要什么价值,都可以致电[self sharedHealth]

您也可以使用预处理器宏。只需定义一下:

#define SharedHealth [[GameStateSingleton sharedMySingleton] getSharedHealth]

然后在需要值时使用它。

请注意,在Objective-C中,您不会调用getter方法“getVariable”,而只需调用“variable”。大多数情况下这是一个约定,但如果你开始使用KVCKVO,那么你必须遵循这个规则。因此,最好尽快适应它。

答案 1 :(得分:0)

如果只是你想要避免的重复输入,你可以使用旧的C方式......

#define GAME_STATE [GameStateSingleton sharedMySingleton]

......然后......

int localValue = [GAME_STATE property];