我的应用程序监视用户位置,包括一些后台位置监视。
我在App Delegate中有一个位置管理器,主要用于初始启动位置以及后台更新。然后,我在视图控制器(地图)中设置了另一个管理器,以获取更多特定事件和快速参考。
我想知道将它重构为一个实例,保存在App Delegate中,并使用以下方法在整个应用程序中进行引用是否是一个好习惯:
self.appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
[self.appDelegate.locationManager startUpdatingLocation];
最佳答案
为了扩展其他评论者的建议,我还建议将其放在自己的类中,如下所示:
// Header
@interface MyLocationManager : NSObject
+ (MyLocationManager *)sharedInstance;
@property (readonly) CLLocationManager *locationManager;
@end
// Implementation
@implementation MyLocationManager
- (id)init
{
self = [super init];
if (self) {
_locationManager = /* set up your location manager */;
}
return self;
}
+ (MyLocationManager *)sharedInstance
{
static MyLocationManager *sharedInstance = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedInstance = [[MyLocationManager alloc] init];
});
return sharedInstance;
}
@end
然后,您可以通过调用
MyLocationManager
在应用程序中的任何地方使用[MyLocationManager sharedInstance]
。