存储单个BOOL全局数据值的最佳方法

我需要一些关于开发iOS应用程序devise最佳实践的build议

这是我正在处理的:当iOS设备失去互联网连接(或没有一个,搞清楚),我希望我的应用程序去某种离线模式,即发射一些事件,发送一些NSNotifications,MB显示某种forms的警报等等。因此,当iOS设备获取它的连接时,我想要反其道而行之 – 将我的应用程序移动到某种在线模式。

所以,我想要的是有能力从我的一些ViewController中访问应用程序的模式(即检查应用程序是在线还是离线)。 我正在考虑两种存储应用程序状态的方法:

1)有一些AppDelegate的属性,并通过我的AppDelegate从任何地方访问它。 AFAIK,这是一个错误的方法,因为AppDelegate不应该被用作应用程序的全局对象,而是用于启动初始化和控制应用程序的状态改变。

2)将这些信息存储在模型级别上。 但我不知道我应该在模型层面上使用什么来达到这个目的。 我不认为使用核心数据或NSUserDefaults是一个好主意,因为我不希望这个属性是持久的,我只需要在当前的应用程序运行。 除了核心数据和NSUserDefaults,我实际上不知道任何其他模型级别的技术。

我不包含任何代码示例,因为它主要是一个理论问题。

您可以使用单例模式并将该variables存储为属性

例如

@interface GlobalData : NSObject @property BOOL connectionAvailable; + (GlobalData *)sharedInstance; @end @implementation + (GlobalData *)sharedInstance { static GlobalData *sharedInstance; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ sharedInstance = [[GlobalData alloc] init]; }); return sharedInstance; } @end // --- in some method [GlobalData sharedInstance].connectionAvailable = /* connection state */; // --- in some other method BOOL connectionAvailable = [GlobalData sharedInstance].connectionAvailable; 

第二种方法效果最好。 你当然不需要任何持久性属性指示互联网连接。 一个好的做法是让你的模型成为一个单例类,为互联网连接提供一个只读的BOOL属性,你的视图控制器可以通过键值观察订阅其更改。 您的模型也可以在内部实现Reachability类来更新互联网连接状态。

我假设你正在使用苹果的可达性类。 http://developer.apple.com/library/ios/#samplecode/Reachability/Introduction/Intro.html

我在Reachability类上创build了一个类来添加一个sharedInstance单例,它允许你检查互联网连接的状态。 我在所有的应用程序中使用这个。

以下是你如何做单身人士:

我如何实现与ARC兼容的Objective-C单例?