MapKit / Místo Manažer pády aplikace při vykládce výhled

hlasů
7

I má chyba, kdy moje žádost havarovaného „EXC_BAD_ACCESS“, když jsem narazila na zadní tlačítko na mém navigačním panelu a názor nezatížený, který měl MapKit (MapView) a používal umístění Manager. Zkoušel několik dní odstranit chybu a nakonec přišel s oprava každého, kdo narazí na tento problém:

Přidejte tento kód do svého dealloc

- (void)dealloc {
    mapView.delegate = nil;
    locationManager.delegate = nil;

    [mapView release];
    [locationManager release];
}
Položena 25/03/2010 v 05:08
zdroj uživatelem
V jiných jazycích...                            


1 odpovědí

hlasů
0

Měl jsem tenhle taky :) A ano, tato oprava je vlastně správné fix;

- (void)dealloc {
  mapView.delegate = nil;
  locationManager.delegate = nil;

  [mapView release];
  [locationManager release];
}

Co se děje v zákulisí, je toto:

  1. Trefíte backkey. To uvolní a v důsledku uvolní řadič, který drží MapView. Jak tam bylo dost pravděpodobné, že pouze jediný odkaz na regulátoru bude dealloc'ed poté.

  2. LocationManager, nicméně, je docela pravděpodobné, že ještě odkazoval se někde ve vnitřním fungování geopositioning.

  3. Jestliže locationManager a / nebo MapView nyní vyslat oznámení jejich příslušným delegáta, jsou následující neplatný ukazatel. Což bude mít za následek výjimku EXC_BAD_ACCESS.

Ano: nilling delegátů, které odkazují na sebe, je vždy dobrý nápad. I usazovacích přál Apple by se přidat ještě nějaký automagic.

Odpovězeno 18/02/2012 v 15:04
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more