2012-06-21 78 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的實例,你永遠不會創建多個。