Objective-C:在不同的视图控制器上声明属性

Objective-C:在不同的视图控制器上声明属性,objective-c,properties,declaration,Objective C,Properties,Declaration,这可能是一个愚蠢的问题,但我发现自己已经厌倦了在多个视图控制器上声明相同的属性。是否有更好的设计来做以下简单的事情: 考虑这一点: 我有一个SoundManager类,在我的iphone项目中使用。这个类只是在用户按下按钮时播放音频(单击声音) 现在,我一直在这样做: 视图控制器A:.h SoundManager *mgr; @property (nonatomic,retain) SoundManager *mgr; 视图控制器A:.m @synthesize *mgr; 在viewDid

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

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

现在,我一直在这样做:

视图控制器A:.h

SoundManager *mgr;
@property (nonatomic,retain) SoundManager *mgr;
视图控制器A:.m

@synthesize *mgr;
在viewDidLoad中

if (mgr == nil)
  mgr = [[SoundManager alloc] init];
然后我在所有视图控制器上重复此操作。至少可以说,这很麻烦。一定有更好的方法来做这样的事情——或者至少有一个我可以使用的代码生成器实用程序


有人有什么建议吗?

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

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

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

@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]。

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

@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]。

子类UIViewController并在其中声明变量,在viewDidLoad中分配变量,然后对于所有后续类,从该子类继承,如果在“每个”控制器中相同,您可以考虑使用其中的某些实用程序方法重写公共控制器。子类UIViewController并在其中声明变量,在viewDidLoad中分配它们,然后对于所有后续类,从该子类继承如果在“every”控制器中相同,您可以考虑使用一些实用程序方法覆盖一个公共控制器。