2011-09-01 66 views
7

我一直在使用应用程序委托作为“全局存储桶”来在各种视图控制器之间共享数据。通常我做这样的事情:iOS在视图控制器中共享“全局数据”

My_AppDelegate *appDelegate = (My_AppDelegate *)[[UIApplication sharedApplication] delegate]; 

然后,我会坚持数据导入的appDelegate,并从另一个视图控制器的appDelegate拿起数据。不知何故,这看起来笨拙和不恰当(尽管它确实有效)。

有没有更好的方法?我可以在某种全球共享区域设置“监听者”,如果有人在其中粘贴数据元素,另一个对象会得到一个“回调”让其知道某人已经准备好了数据?

在Java中,我们用Observer/Observable类来做到这一点 - 也许有这样的事情,或者更好的iOS?

回答

3

清洁程序虽然不一定是不同的,但可以创建单例类, AppData,您可以通过多种方式访问​​,其中所有其他课程均可使用。它具有将应用程序特定的东西与应用程序委托的东西分开的好处。你可能会定义类是这样的:

 
@interface AppData : NSObject 

// Perhaps you'll declare some class methods here... 

@end 

我做一个普通的事情是这样的类定义类的方法访问,例如,设置的值,或应用程序特定的常量或其他单一对象。有很多可能性。

最后,你可以用类方法做很多事情,你可以调用类似[AppData theMethod]的东西。请记住,没有self在类方法中访问。

更进一步,您可以为AppData类定义ivars,然后管理AppData的单例实例。使用类方法,例如+sharedInstance,以得到你可以调用mehods的单身人士的句柄。例如,[[AppData sharedInstance] someMethod:myArgument]。你的+sharedInstance的实现可以是你管理单实例创建的地方,方法最终返回。

我不确定我是否称这种方法为“最佳实践”,但我发现这种模式非常方便。

+0

是的,我忘了单身人士,我一直用它们在Java中,我会试试它.. – geekyaleks

相关问题