NSMutableArray горе памяти - PullRequest
       2

NSMutableArray горе памяти

0 голосов
/ 04 апреля 2011

У меня есть класс результата, в котором есть NSMutableArray, который вызывает у меня утечки памяти. Я сканировал Google, чтобы попытаться выяснить, почему, но ничего не работает.

Кто-нибудь может увидеть здесь утечку памяти?

@interface Response : NSObject 
{
    NSMutableArray *Items;
}
@property (nonatomic, retain) NSMutableArray *Items;

----

-(id)init {
    self = [super init];
    if (!self) {
        return nil;
    }
    self.Items = [[NSMutableArray alloc] init];
    return self;
}
-(void)dealloc
{
    [self.Items release], self.Items = nil;
    [Items release], Items = nil;
    [super dealloc];
}

Тогда его использовали так:

-(void)Update
{
    Response *resp = [self getResponse];
    foreach(GameObject *o in resp.items){
        //Do Stuff
    }
}
-(Response*)getResponse
{
    Response *result = [[Response alloc] init];
    //Loop through things
    [result.items addObject:o];
    //Finish looping stuff
    return result;
}

Я застрял при попытке устранить утечку памяти. Любая помощь с благодарностью.

Ответы [ 2 ]

0 голосов
/ 04 апреля 2011

Следующей строкой является проблема ...

self.Items = [[NSMutableArray alloc] init];

Ваше свойство items имеет атрибут 'retain', который увеличивает количество записей, но у вас также есть счет сохранения 1 из alloc.Так что вместо этого сделайте одно из этих ....

self.items = [[[NSMutableArray alloc] init] autorelease];

или

NSMutableArray *newArray = [[NSMutableArray alloc] init];
self.items = newArray;
[newArray release];
0 голосов
/ 04 апреля 2011

Уверен, что ваш объект Response вызывает утечку, так как вы используете alloc / init и возвращаете его, и dealloc никогда не вызывается.Вы должны пометить его как autorelease в getResponse ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...