我在我的应用程序中使用核心位置框架并在didUpdateToLocation方法中将更新的位置发送到服务器,并且我分配CLLocationManager实例的视图是登录后的第二个视图,此视图从登录视图调用并在dealloc中释放CLLocationManager方法,但每次我从登录屏幕来,然后didUpdateToLocation方法调用两次三次取决于我从登录视图来的次数,所以问题是什么,我怎么能避免这个?
答案 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实例,就永远不会创建多个实例。