Утечка во время создания NsMutableData - PullRequest
1 голос
/ 10 мая 2011

Во время создания NSMutableData у меня есть утечка. Я высвобождаю webData2 в соединении DidFinishLoading ...

webData2 = [[NSMutableData alloc]init];

Итак, я протестировал это:

NSMutableData *test =[[NSMutableData alloc]init];
webData2 = test;
[test release];

и у меня течь по инструкции: NSMutableData *test =[[NSMutableData alloc]init];

Я не понимаю! У кого-нибудь есть идеи?

Спасибо!

GT

Ответы [ 2 ]

4 голосов
/ 10 мая 2011

Это не будет работать, ссылка в webData2 совпадает с test и будет освобождена.

  1. webData2 = [[NSMutableData alloc]init]; // webData2 points to object A
  2. NSMutableData* test = [[NSMutableData alloc] init]; // test points to object B
  3. webData2 = test; // test and webData2 both points to A, nothing points to B
  4. [test release]; // object B is released, test and webData2 points to garbage

Итак, проблема в строке 3, где у вас больше нет явной ссылки на объект B, размещенный в строке 1.

Вам нужно освободить webData2, прежде чем присваивать ему новый указатель объекта.

Как указывает bbum, утечка всегда относится к тому, где расположен объект, а не к тому, где он фактически произошел.1024 *

В случае сомнений используйте статический анализатор (фактически всегда запускайте статический анализатор время от времени).Вы найдете его в Xcode в меню Build как Build and Analyze .Среди множества ошибок он найдет большинство утечек памяти и отметит их синими стрелками на полях.Расширение стрелок покажет весь поток программы для утечки от распределения к последней потерянной ссылке.

0 голосов
/ 10 мая 2011

что вы можете сделать:

NSMutableData *test =[[NSMutableData alloc]init];
webData2 = [test copy];
[test release];

, тогда webData2 не будет выпущен вместе с тестом ... вам придется выпустить его позже.

...