0

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

4

2 回答 2

1

我通常只使用单例来处理这类事情。只需定义一个类方法(在方法定义上使用 + 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 实例,就永远不会创建多个实例。

于 2012-07-10T05:07:42.233 回答
1

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

每次您需要获取此实例时,您都会这样做

YouAppDelegate *appDelegate = (YouAppDelegate *)[UIApplication sharedApplication].delegate;
appDelegate.yourLocationInstance;
于 2012-06-21T08:05:36.600 回答