Утечка памяти для объекта в массиве - PullRequest
0 голосов
/ 26 июня 2010

Я начал очищать свое приложение перед публикацией - с помощью анализатора утечек "Instruments".

Я обнаружил утечку, которую не могу устранить.Поэтому я построил простой проект для иллюстрации проблемы.Пожалуйста, смотрите код ниже.Я положил кнопку на вид, чтобы проверить огонь процедуры «тест».Он всегда генерирует утечку.

Сначала заголовок и код для объекта с именем "theObj"

#import <Foundation/Foundation.h>


@interface theObj : NSObject {

NSString * theWord;} @property (nonatomic, retain) NSString * theWord;

@end

#import "theObj.h"


@implementation theObj
@synthesize theWord;

-(id) initWithObjects: (NSString *) aWord;
{
 if (self = [super init]){
  self.theWord = aWord;
 }
 return self;
}

-(void) dealloc{
[theWord release];
[super dealloc];
}

@end

Теперь контроллер представления

#import <UIKit/UIKit.h>
#import "theObj.h"

@interface LeakAnObjectViewController : UIViewController {
 NSMutableArray* arrObjects;
}
  - (IBAction)test;
@end

#import "LeakAnObjectViewController.h"

@implementation LeakAnObjectViewController

- (IBAction)test {  
 if (arrObjects == nil)
  arrObjects = [[NSMutableArray alloc] init];

 NSString* aStr = @"first";
 [arrObjects addObject:[[theObj alloc] initWithObjects:aStr]];
 [arrObjects removeAllObjects];
}  

Ответы [ 2 ]

0 голосов
/ 26 июня 2010

Кто-то действительно должен выучить правила управления памятью .В частности, как это относится к собственности и т. Д.

0 голосов
/ 26 июня 2010

Вы выделяете объект, что означает, что он принадлежит вам. Затем вы передаете его массиву, что означает, что массив также владеет им. Затем массив удаляет его, поэтому вы единственный владелец. Но у вас больше нет ссылки на объект, поэтому вы не можете освободить его, поэтому он просто просочился.

...