/ / Používanie nástrojov na kontrolu úniku pamäte v XCode? - iphone, objektív-c, pamäť, pamäť-úniky, nástroje

Používanie nástrojov na kontrolu úniku pamäte v XCode? - iphone, objektív-c, pamäť, pamäť-úniky, nástroje

Dobrý deň,

Ja som úplne neskúsený pri kontrole úniku pamäte, a tak by akákoľvek pomoc s týmto by bola skvelá.

Práve som dokončil väčšinu práce pre mňaiPhone aplikácie a ja sa teraz snažím zistiť, prečo prestane fungovať po niekoľkých bežiacich.Používanie nástrojov v úniku a prideľovanie režime môžem vidieť, sú tam dva objekty, ktoré nahromadia pamäť pomerne rýchlo a nie uvoľnenie: tu zadajte popis obrázku

Nie som stopercentne istý, kde alebo prečo sa to deje, ale keď som klikol na šípku napravo od UIDeviceRGBColor, zodpovedný volajúci je uvedený ako

[UIColor allocWithZone];

Urobil som prehľad v mojom projekte pre UICcolor a prišiel som to (berte na vedomie _colorThreshold):

tu zadajte popis obrázku

Verím, že môj problém súvisí s _colorThreshold, ktorý sa nezdá byť prepustený:

tu zadajte popis obrázku

Snažil som sa pridať autorelease k ich argumentom inicializácie, ale to spôsobilo zlyhanie aplikácie.


EDIT 1

Tu je snímka obrazovky z LevelMeter.h tu zadajte popis obrázku

odpovede:

2 pre odpoveď č. 1

Existuje niekoľko problémov s vyššie uvedeným:

  • Je LevelMeterColorThreshold trieda Objective-C?
  • Ak áno, prečo používate malloc namiesto zvyčajného prideľovania / inicializácie?
  • Pri vkladaní snímok obrazovky výsledkov vyhľadávania nemôžeme vidieť okolitý kód, keďže sa zobrazujú len riadky s výsledkami vyhľadávania.

Zaznamenáva úniková príručka Leaks, alebo len prideľujete nepotrebnú pamäť?
Medzi týmito dvoma prípadmi je rozdiel:

  1. Neúspech sa stane, ak uvoľníte odkaz na objekt, takže ho nemôžete poslať a release správu neskôr.
  2. Instanciačné objekty, ktoré už nie sú potrebné bez uvoľňovania / uvoľňovania

Úniky môžu zistiť iba prvý prípad.
Vzorka na únik:

NSMutableString* test = [[NSMutableString alloc] initWithString:@"1"];
NSLog(@"%@", test);
NSMutableString* anotherTest = [[NSMutableString alloc] initWithString:@"2"];
test = anotherTest; //here we loose reference to the original object
NSLog(@"%@", test);

Priradením iného testu k testu sme stratili odkaz, ktorý ukazuje na pamäťovú adresu, ktorá obsahuje @ 1.