gee*_*eks 7 iphone cocoa-touch objective-c sharing ios
我一直在使用app delegate作为"全局存储桶"来在各种视图控制器之间共享数据.通常我做这样的事情:
My_AppDelegate *appDelegate = (My_AppDelegate *)[[UIApplication sharedApplication] delegate];
Run Code Online (Sandbox Code Playgroud)
然后,我会将数据粘贴到appDelegate中,并使用另一个视图控制器从appDelegate中获取数据.不知何故,这似乎笨拙和不恰当(虽然它确实有效).
有没有更好的办法?我可以在某种全局共享区域设置一个"监听器",如果有人在那里粘贴数据元素,另一个对象会得到一个"回叫",让它知道某人有数据准备好了吗?
在Java中,我们曾经使用Observer/Observable类做到这一点 - 也许有类似的东西,或者在iOS中更好?
一种更简洁(虽然不一定不同)的方法是创建一个单例类,例如AppData,您可以通过多种方式访问它,并且它可供所有其他类使用。它的好处是将应用程序特定的内容与应用程序委托的内容分开。您可以这样定义该类:
@interface AppData:NSObject // 也许您会在这里声明一些类方法... @结尾
我做的一个常见的事情是在这样的类上定义类方法来访问,例如,设置值或特定于应用程序的常量或其他单例对象。有很多可能性。
最后,您只需使用类方法就可以完成很多工作,您可以将其称为[AppData theMethod]. 请记住,无法self在类方法内部进行访问。
更进一步,您可以为 AppData 类定义 ivars,然后管理 AppData 的单例实例。使用类方法,例如+sharedInstance,获取单例的句柄,然后可以在其上调用方法。例如,[[AppData sharedInstance] someMethod:myArgument]。您可以在 的实现+sharedInstance中管理单例的实际创建,该方法最终会返回该单例。
我不确定是否会将这种方法称为“最佳实践”,但我发现这种模式非常方便。
| 归档时间: |
|
| 查看次数: |
2655 次 |
| 最近记录: |