2012-06-21 35 views
0

我在我的应用程序中使用核心位置框架并将更新位置发送到didUpdateToLocation方法中的服务器,并且我分配CLLocationManager实例的视图是登录后的第二个视图,此视图是从登录视图调用并释放CLLocationManager的dealloc方法但每次我来自登录屏幕,然后didUpdateToLocation方法调用两次和三次取决于我从登录视图来了多少次,所以问题是什么,我该如何避免这种情况?如何避免多次分配CLLocationManager实例?

回答

1

如果你想避免你的CLLocationManager实例的多个分配,定义实例为您appDelegate

每当你需要得到这个实例的时间属性,你会做

YouAppDelegate *appDelegate = (YouAppDelegate *)[UIApplication sharedApplication].delegate; 
appDelegate.yourLocationInstance; 
1

我通常只使用singleton这种类型的东西。只需定义一个类方法(在方法定义上使用+ vs a - )。这里是一个单身定义的例子:

+(id)sharedLocationManager 
{ 
static BCLocationManager *sharedLocationManager; 
@synchronized(self) 
{ 
    if (!sharedLocationManager) 
    { 
     sharedLocationManager = [[BCLocationManager alloc] init]; 
    } 

    return sharedLocationManager; 
} 
return sharedLocationManager; 
} 

基本上你定义类的静态实例,如果不存在,它只是初始化。使用单例,您永远不会访问实例init函数。始终单身访问的结果分配给适当的指针,像这样:

BCLocationManager * testInstance = [BCLocationManager sharedLocationManager]; 

现在,所有你需要做的就是在您的应用选择合适的header.h,每个人都可以看到你的位置经理是单个实例。只要你不使用init的实例,你永远不会创建多个。