Iphone: Это плохая идея?Управление памятью / утечка - PullRequest
0 голосов
/ 26 сентября 2010

У меня есть класс, который в основном управляет основными данными.вставляет удаляет и обновляет данные.Я инициализирую этот класс следующим образом:

- (id)init
{
    self = [super init];
    if (self) {
        self.itemList = [NSDictionary dictionaryWithObjectsAndKeys: // <== LEAKS
                    ITEMURL1, KEY1,
                    ITEMURL2, KEY2,
                    ITEMURL3, KEY3,
                    ITEMURL4, KEY4,
                    ITEMURL5, KEY5,
                    nil];
        self.storedItems = [[NSMutableArray alloc] init]; // <== LEAKS

    }
    return self;
}


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

Я позаботился о том, чтобы тщательно освободить каждый объект.всякий раз, когда он выделяется, но у меня все равно возникают утечки в init при запуске приложения в Instruments.

что происходит?я делаю что-то не так?

Ответы [ 2 ]

1 голос
/ 26 сентября 2010

Вам необходимо добавить [itemList release] в ваш метод dealloc (при условии, что вы получили «retain» в объявлении свойства.

Что касается хранимых элементов, если вы получили retain в объявлении свойства,Вы должны автоматически выпустить его, когда назначите:

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

Или более кратко, но эквивалентно:

self.storedItems = [NSMutableArray array];
0 голосов
/ 26 сентября 2010

Относительно сохраненных элементов:

, если сохраненные элементы объявлены как

@property (nonatomic, retain) NSMutableArray *storedItems;

(важна сохраняемая часть), тогда вам необходимо выполнить:

NSMutableArray *storedItems_ = [[NSMutableArray alloc] init];
self.storedItems = storedItems_;
[storesItems_ release];

alloc+ init приведет к тому, что счетчик вашего объекта9 ¥ перейдет к 1. Затем использование self.xxx сохранит его снова, как указано в атрибутах вашего свойства.Следовательно, это будет 2. Это не произойдет с назначением

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