2010-09-16 2 views
0

Случай 1:Как избежать утечки памяти в этом случае?

-(id)getAnObject{ 

     Object *someObject = [[Object alloc] init]; 
     //doing something 

     return someObject; 

} 

Случай 2:

-(void)dealWithAnObject{ 
      Object *someObject = [[Object alloc] init]; 
      [assignTheObjectToOther someObject]; 

} 

Оба случая 1 и 2 случая есть предупреждение в XCode, что я должен сделать, чтобы иметь дело с этими двумя? Спасибо.

ответ

5

Золотое правило управления памятью: все должно знать, к каким объектам оно принадлежит. И только вы можете принять это решение.

Я настоятельно рекомендую прочитать memory management guide Apple. По крайней мере, дважды.

Для вашего конкретного случая:

  1. getAnObject не всегда освобождает объект, он создает. Если вы собираетесь вернуть его, вы сначала захотите сделать его autorelease.

  2. dealWithAnObject также не выпускает его объект. Вы можете либо autorelease, либо release после вызова функции, которая его использует. Убедитесь, что все, что его использует, соответствует тем же правилам, и все будет в порядке.

Смежные вопросы