Почему я получаю эту странную утечку памяти, когда касаюсь своего UIImageView? - PullRequest
1 голос
/ 03 июня 2009

Это действительно странно. У меня есть пустой подкласс UIImageView, который реализует методы -touchesEnded :, -touchesMoved и -touchesBegan :. Реализации этих методов пусты. Они просто ничего не делают. Однако, когда я запускаю Инструменты с «Утечками», касаюсь UIImageView и вывожу палец за пределы этого UIImageView, все еще касаясь экрана, я получаю предупреждение об утечке памяти от Инструментов.

В моем демонстрационном приложении при этом не происходит распределение объектов. Методы пусты. Все, что я читаю в Instruments, относится к материалам Foundation и Run Loop. Я дважды проверил свой класс и удалил все объекты. Это просто скелет, который показывает только изображение, но это изображение не изменяется при прикосновении к нему или перемещении пальца по экрану. Это не имеет смысла.

Кто-нибудь еще сталкивался с такими проблемами?

ОБНОВЛЕНИЕ: Я тестировал немного больше и выяснил, что утечки памяти происходят в любой точке экрана при быстром постукивании 5 пальцами. Все, что я получаю от Instruments.app, касается некоторых циклов выполнения и событий. Кажется, что если устройство не может обработать прикосновения достаточно быстро, а затем застревает в какой-то момент с освобождением выделенных объектов. Пожалуйста, попробуйте и сообщите здесь, если вы видите те же проблемы.

ОБНОВЛЕНИЕ: Я также протестировал несколько примеров приложений Apple. Когда я взламываю 3 - 5 пальцев на экране, как это делает обычный пользователь (да, они сделают!), Тогда прибор показывает утечки памяти относительно событий и циклов выполнения. Определенно есть большой в рамках, или в инструментах. Протестировано с iPhone OS 2.2.1.

1 Ответ

2 голосов
/ 03 июня 2009

Как читается на яблочном форуме, это нерешенная проблема в SDK. Это происходит, когда делегат акселерометра не равен нулю. Объекты сенсорных событий выделяются, но никогда не освобождаются. Чем быстрее вызывается делегат акселерометра, тем быстрее происходят ошибки распределения. Многие из примеров кода Apple показывают ту же проблему. У меня был включен акселерометр.

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

Решения: Выключите акселерометр (делегат установлен на ноль), уменьшите количество просмотров в вашем приложении. Я не знаю, исправили ли они эту проблему в iPhone OS 3.0.

К сожалению, это не поможет:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    [[UIAccelerometer sharedAccelerometer] setDelegate:nil]; // because of framework bug
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
    [[UIAccelerometer sharedAccelerometer] setDelegate:self]; // because of framework bug
}

- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event {
    [[UIAccelerometer sharedAccelerometer] setDelegate:self]; // because of framework bug
}

Более подробная информация по адресу: http://discussions.apple.com/thread.jspa?messageID=9396584t

...