Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поворот слоя и утечка памяти 
:(
    Опции темы
200cm3
Дата 10.7.2011, 07:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 21.11.2007

Репутация: нет
Всего: нет



в моем приложении используется анимация слоев, на определенном этапе мне необходимо вращать слой для этого сделал процедуру которой я в качестве параметра передаю слой и угол до которого хочу довернуть слой

- (void) LrByRotate:(CALayer *)lr :(float) angle : (float) dura : (NSString *)keyPath{
    
    CABasicAnimation *rota = [CABasicAnimation animationWithKeyPath:@"transform.rotation" ];
    rota.fillMode = kCAFillModeForwards;
    rota.duration = dura;
    rota.delegate = self;
    rota.autoreverses = NO;
    rota.removedOnCompletion = NO;
     rota.byValue = [NSNumber numberWithFloat: DegreesToRadians(angle) ];
    [rota setValue:keyPath forKey:@"myAnim"];
    
    [lr addAnimation: rota forKey: nil];
  }

-(void) Meln{
 
   [self LrByRotate:lr3KrilyaMelnici :360/sector * (vectorMeln): duraMeln : @"Meln"];
}
- (void) animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag {
    NSString* value = [theAnimation valueForKey:@"myAnim"];
    
    // NSLog(@"DID STOP %@", value);
    
    if ([value isEqualToString:@"Meln"])
    {
        [self Meln];
    }
}


Если вызывать более 200х раз то появляются тормоза в следствии утечки памяти
непосредственный вопрос что я делаю не так? 
PM MAIL   Вверх
Bitter
Дата 10.7.2011, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный лентяй
***


Профиль
Группа: Завсегдатай
Сообщений: 1209
Регистрация: 15.8.2004
Где: Харьков, Ukraine

Репутация: 10
Всего: 27



Мне кажется, что утечка заключается в том, что Вы каждый вызов функции создаете объект класс CABasicAnimation и нигде его не уничтожаете. Хотя может все добавленные анимации уничтожаются автоматически по окончании, я точно не знаю, но думаю искать надо тут
PM MAIL ICQ Skype   Вверх
200cm3
Дата 10.7.2011, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 21.11.2007

Репутация: нет
Всего: нет



к сожалению я не могу уничтожить объект пока не закончилась анимация, а потом уже нет ссылки на класс
PM MAIL   Вверх
Bitter
Дата 11.7.2011, 10:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный лентяй
***


Профиль
Группа: Завсегдатай
Сообщений: 1209
Регистрация: 15.8.2004
Где: Харьков, Ukraine

Репутация: 10
Всего: 27



Попробуйте в функции - (void) animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag
первой строчкой написать 
[lr3KrilyaMelnici removeAnimationForKey:@"Meln"];

А в функции - (void) LrByRotate:(CALayer *)lr :(float) angle : (float) dura : (NSString *)keyPath
заменить строку 
[lr addAnimation: rota forKey: nil];
на 
[lr addAnimation: rota forKey: @"Meln"];

то есть при добавлении анимации, ей задается имя, а при окончании анимации, зная ее имя удаляем ее. 
PM MAIL ICQ Skype   Вверх
200cm3
Дата 11.7.2011, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 21.11.2007

Репутация: нет
Всего: нет



Спасибо что  вникаете в проблему.
[lr3KrilyaMelnici removeAnimationForKey:@"Meln"];  - пробовал, пробовал  а также  [lr3KrilyaMelnici removeAllAnimations];  память не освобождается(


[lr addAnimation: rota forKey: nil]; было написано чтоб получить свойства делегата а именно доступ к animationDidStop но тем не менее попробовал с тем же результом

PM MAIL   Вверх
Bitter
Дата 11.7.2011, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный лентяй
***


Профиль
Группа: Завсегдатай
Сообщений: 1209
Регистрация: 15.8.2004
Где: Харьков, Ukraine

Репутация: 10
Всего: 27



Единственное что еще могу предположить - это либо память засоряется за пределами этих трех функций, либо у вас еще каким-то параллельным образом вызывается функция Meln постоянно добавляя новые циклы анимации. Это то, что я могу предположить, может быть проблема в другом. Все таки оставьте [lr3KrilyaMelnici removeAnimationForKey:@"Meln"] на всякий случай (или прочтите документацию о том нужно ли удалять ее или она сама удаляется)
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | iOS | Следующая тема »


 




[ Время генерации скрипта: 0.0659 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.