我一直使用app delegate作为“全局存储桶”来在各种视图控制器之间共享数据。通常我做这样的事情:
My_AppDelegate *appDelegate = (My_AppDelegate *)[[UIApplication sharedApplication] delegate];
然后,我会将数据粘贴到appDelegate中,并使用另一个视图控制器从appDelegate中获取数据。不知何故,这看起来很笨拙和不合适(虽然它确实有效)。
有更好的方法吗?我可以在某种全局共享区域设置一个“监听器”,如果有人在那里粘贴一个数据元素,另一个对象会得到一个“回叫”,让它知道某人有数据准备好吗? / p>
在Java中我们习惯用Observer / Observable类做这个 - 也许有类似的东西,或者更好的iOS?
答案 0 :(得分: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
的实现可以是您管理单例的实际创建的位置,该方法最终会返回。
我不确定我是否称这种方法为“最佳做法”,但我发现这种模式非常方便。