如何在两个类之间共享数组?

时间:2009-12-11 11:42:14

标签: iphone cocoa-touch

我想要一个数组,从一个类中获取数据,以便在具有相同数据的另一个类中使用 如果我们在applicationDelegate类上声明一个数组 然后在两个类中声明applicationDelegate的对象 并将数组从一个类分配到appDelegate.array中,我是否可以在类中获取数组?

2 个答案:

答案 0 :(得分:2)

我和迈克在一起。保留App Delegate。

您可以控制对象的实例化时间和方式。如果您创建依赖类的实例,那么对于多个类来说,访问相同数据,切换数据或获取数据的方法非常重要。

一个例子,给定WVParent类和WVChild。

WVParent有一个属性someArray,它是你的其他对象需要的数组:

@interface WVParent : NSObject {

 NSArray *someArray

}
@property (nonatomic, retain) NSArray *someArray;

@end

然后你有WVChild,它本身有一个名为parentObject的属性:

@class WVParent;

@interface WVChild : NSObject {

 WVParent *parentObject;

}
@property (nonatomic, assign) WVParent *parentObject;

@end

假设父实例正在创建子实例,您将分配它并分配父实例:

WVChild *child = [[WVChild alloc] init];
child.parentObject = self;

然后子实例可以通过以下方式访问someArray:

self.parentObject.someArray

这只是一个选择。您也可以将数组本身传递给子节点,假设数据是静态的,并且在应用程序会话过程中不太可能发生变化。

这样,它不会在App Delegate中的某个地方生成数据源,而是存在于更适合其创建,维护和出售的类中。如果你有一个流行的类,并且只能通过获取应用程序委托来访问你应用程序的其余部分,那么你可能需要更多地考虑一下你的架构。

有关依赖注入的更多内容:

http://en.wikipedia.org/wiki/Dependency_injection

答案 1 :(得分:1)

是的,您可以在applicationDelegate课程中声明成员/属性,但您应该尝试遵循单一责任原则,并确保最终不会在您的应用代表中填充大量杂项共享内容(iPhone代码会发生很多事情)。

另一种选择是在创建对象时将数组注入到对象的构造函数中。

在设计方面很难知道最佳解决方案,而不知道这些数据是什么以及它真正属于何处。