/ / NSURLConnection Leak - iphone, objektív-c

NSURLConnection Leak - iphone, objektív-c

Dnes som čelil malému problému, chcel som vedieť dôvod úniku. Tu je kód

[[NSURLConnection alloc] initWithRequest:request delegate:self];

To funguje bez problémov.

Teraz som sa len pýtal, čo sa stane s touto pridelenou pamäťou / objektom, pretože ho nikto neuvoľní. Takže podľa inštinktu som dal autorelease pri alokácii takto:

[[[[NSURLConnection alloc] initWithRequest:request delegate:self] autorelease];

Toto mi spôsobilo chybu a zlyhanie "[NSURLConnectionInternalConnection _withConnectionDisconnectFromConnection]: správa bola odoslaná na deallocated inštanciu"

Len chcel vedieť koncept a dôvod za tým.

EDIT: Nepoužívam ARC.

Vďaka.

odpovede:

0 pre odpoveď č. 1

[NSURLConnectionInternalConnection _withConnectionDisconnectFromConnection]

toto bolo nazvané po Autorelease Pooluvoľnil váš objekt pripojenia NSURLConnection. Najlepšou cestou by mala byť referencia pre premennú a jej uvoľnenie po dokončení načítania údajov. (Môže byť v zobrazeníDidUnload:?)


1 pre odpoveď č. 2

Myslím, že tu nemôžete použiť autorelease na lepšie riadenie pamäte, uvoľnite objekt pripojenia v delegátovej metóde pripojenia

 - (void)connectionDidFinishLoading:(NSURLConnection *)connection;
{
[connection release];
}

Takže po dokončení vášho pripojenia sa uvoľní objekt pripojenia alebo ho môžete uvoľniť viewDidUnload tiež


0 pre odpoveď č. 3

Túto metódu môžete použiť na lepšiu správu pamäte NSURLConnection * connection = [NSURLConnection connectionWithRequest: urlRequest delegate: self];

Metóda pripojeniaWithRequest je triedaa spravovať pamäť samotnú, nemusíte ju uvoľňovať. Pokiaľ viem, po pridelení objektu pripojenia objc runtime pridá objekt do autoreleasepool, potom sa do delegovaných inštancií odošle aj ďalšia delegovaná metóda.