多个类之间的共享数组

时间:2011-01-26 08:30:33

标签: objective-c singleton

我有一个数组“myArr”,其中包含自定义类的对象.e.g。 MyClass类型的objs

我需要在多个类之间共享此数组..

你能帮我解决一下我应该使用的确切代码吗?

我在Apple和其他参考文献中引用了Singleton模式,但这对我来说简直令人困惑......所以如果你能突出我需要添加的东西/代码那将会很棒。

2 个答案:

答案 0 :(得分:1)

我建议您阅读对象委派。

  

@property(非原子,复制)NSArray * myArr;

在其他类上,实现一个指向此类的委托对象,然后您可以使用:

  

NSArray * retrieveArray = [self.delegate myArr];

编辑:如果你有兴趣只使用Singleton,我相信它会是这样的:

  

static MyClass * obj = nil;

在使用数组的类上,创建一个类方法以返回Singleton对象

  

+(MyClass *)sharedInstance {

     if (obj) {

      obj = [[self alloc]init];

     }
     

return obj;

     

}

在您的其他课程上,您可以使用

  

NSArray * retrieveArray = [[MyClass sharedInstance] myArr];

取回阵列。

干杯。

答案 1 :(得分:0)

stay away from singletons。由于数组是某种模型(在模型 - 视图 - 控制器意义上),其他类应该依赖于它:

@interface ControllerA : UIViewController {}
@property(retain) NSArray *array;
@end

@interface ControllerB : UIViewController {}
@property(retain) NSArray *array;
@end

现在问题变成“我如何提供依赖项。”您可以使用Interface Builder执行此操作,或者在构建依赖对象时提供数组。例如,我有时在我的应用程序委托中有一个名为setupObjectGraph的方法,它创建类实例并将它们连接在一起:

- (void) setupObjectGraph
{
    mainController = [[MainController alloc] init…];
    [mainController setThis…];
    [mainController setThat…];

    OtherController *bar = [[OtherController alloc] init…];
    [bar setThis…];
    [bar setThat…];
    [mainController setBar:bar];
    [bar release];

    …
}

- (void) applicationDidFinishLaunchingOrWhatever
{
    [self setupObjectGraph];
    [window addSubview:[mainController view]];
    [window makeKeyAndVisible];
}

这并不完美(它不能很好地扩展),但它适用于许多应用程序,它比单例更好。这听起来像是一个小问题,但它会对你的整体设计产生很大的影响,所以仔细思考它是有意义的。