Утечка памяти на устройстве при использовании mutableCopy - PullRequest
0 голосов
/ 01 июня 2011

Я думал, что действительно близок к тому, чтобы выпустить это новое приложение, когда я зашел в тупик. Мой код работает без утечек памяти в симуляторе (Xcode 4.0.2), но сообщает об утечках памяти на моих устройствах.

Я думаю моя проблема связана с тем, что я копирую объект, потому что в своих попытках устранения неполадок я пытался без копии, и затем утечка памяти исчезает (но, конечно, так же и моя функциональность!) ,

Что я делаю, так это добавляю несколько экземпляров подкласса UIView в массив. Этот подкласс (города, экземпляром которого является cityToAdd) имеет два UIViews и некоторые переменные, к которым мне нужно обратиться на более позднем этапе.

Если я это сделаю, у меня будут утечки памяти на моих устройствах:

[arrayOfCities addObject:[[cityToAdd mutableCopy] autorelease]];

Но если я делаю это, я не делаю (но теряю функциональность)

[arrayOfCities addObject:cityToAdd];

В подклассе у меня есть это для копирования:

- (id)mutableCopyWithZone:(NSZone *)zone{

Cities *newCity = [[Cities allocWithZone:zone] init];

[newCity initWithCityName:cityName 
                   onRing:ring 
             withTimeZone:timeZone 
       withTimeZoneOffset:timeZoneOffset 
             withDSTAngle:DSTAngle 
                   andDST:isDST];

 return newCity;

}

Из инструментов я получаю это при тестировании на устройстве:

enter image description here

и когда я углубляюсь во второй ряд, он показывает это: enter image description here

Наконец, мой метод initWithCityName (извините за такой длинный пост !!) Я поставил его как рисунок, чтобы получать цвета и сообщения от инструментов ...

enter image description here

Наконец, UIIMage imageNamedUniversal - это расширение, позволяющее мне передавать изображения @x в 2 раза на iPad (но я пробовал с обычным imageNamed и получал те же утечки памяти).

Я не знаю с чего начать !! Цени любые идеи.

Спасибо

Ответы [ 3 ]

0 голосов
/ 01 июня 2011

Две вещи для рассмотрения:

После добавления cityView и DSTView в качестве подпредставлений вы можете и должны их освободить.

И вы дважды инициализируете newCity в вашем copyWithZone.

0 голосов
/ 01 июня 2011

Спасибо за быстрые ответы и предложения.Вы сделали меня на правильном пути.CityToAdd, который я добавил в свой массив, добавлялся несколько раз в цикле, но я держал alloc и init вне цикла.После того, как я поместил его в цикл, он работает как на симуляторе, так и на устройстве.

Странно, что симулятор не сообщает об утечке памяти, хотя ...

Опять же, спасибо за ваши быстрые ответы!

0 голосов
/ 01 июня 2011

Почему вы вызываете два метода инициализации? Вы звоните init и initWithCityName ....

...