我有一个数组“myArr”,其中包含自定义类的对象.e.g。 MyClass类型的objs
我需要在多个类之间共享此数组..
你能帮我解决一下我应该使用的确切代码吗?
我在Apple和其他参考文献中引用了Singleton模式,但这对我来说简直令人困惑......所以如果你能突出我需要添加的东西/代码那将会很棒。
答案 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];
}
这并不完美(它不能很好地扩展),但它适用于许多应用程序,它比单例更好。这听起来像是一个小问题,但它会对你的整体设计产生很大的影响,所以仔细思考它是有意义的。