如何避免多次分配CLLocationManager实例?

时间:2012-06-21 07:56:50

标签: iphone ios5 gps xcode4.2 core-location

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

2 个答案:

答案 0 :(得分:1)

如果要避免多次分配CLLocationManager实例,请将实例定义为appDelegate

的属性

每次你需要获得这个实例时你都会做

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

答案 1 :(得分: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实例,就永远不会创建多个实例。