1

这可能是一个愚蠢的问题,但我发现自己已经厌倦了在多个视图控制器上一遍又一遍地声明相同的属性。有没有更好的设计来做一些简单的事情,如下所示:

考虑一下:我有一个在整个 iphone 项目中使用的 SoundManager 类。此类仅在用户按下按钮时播放音频(单击声音)。

现在,我一直在这样做:

视图控制器 A:.h

SoundManager *mgr;
@property (nonatomic,retain) SoundManager *mgr;

视图控制器 A:.m

@synthesize *mgr;

并在 viewDidLoad

if (mgr == nil)
  mgr = [[SoundManager alloc] init];

然后我在我所有的视图控制器上重复这个。至少可以说这很麻烦。必须有更好的方法来做这样的事情 - 或者至少是我可以使用的代码生成器实用程序?

有人有什么建议吗?

4

2 回答 2

1

您可以为该类实现一个单例:

@interface SoundManager : NSObject
{
    //your ivars
}

//your @properties

//singleton
 + (id)sharedManager;

@end

@implementation SoundManager

//synthesize

static SoundManager *instance = nil;
+ (id)sharedManager
{
    //you may want to add a @synchronized() here
    if (instance == nil)
    {
        instance = [[SoundManager alloc] init];
    }
    return instance;
}
@end

然后在需要 SoundManager 实例的任何地方调用 [SoundManager sharedManager]。

于 2012-07-16T10:46:56.013 回答
0

听起来整个应用程序都使用同一个 SoundManager 实例?也许单例模式会更有用。或者以其他方式创建具有上述功能的自定义视图控制器,并使所有其他视图控制器继承自该自定义视图控制器。

于 2012-07-16T10:46:23.707 回答