Переиздание здесь? - PullRequest
       13

Переиздание здесь?

3 голосов
/ 08 января 2010

Я получал EXC_BAD_ACCESS на некоторых устройствах в специальной бета-версии для моего приложения, смотрите здесь: Справка по отладке приложения для iPhone - EXC_BAD_ACCESS

Мне удалось использовать atos -arch armv6 -o myapp.app/myapp 0x000037a6 в терминале, чтобы отследить метод, который вызывает эту проблему, и это приводит меня к следующему коду:

for (UIView *view in scrollView.subviews) {
    [view removeFromSuperview];
}

Я подозреваю, что приложение получает предупреждение о доступе к памяти и освобождает scrollview или UIImageViews, которые являются его дочерними, поэтому, когда я использую этот метод выше, оно попадает в ошибку (и сбой), так как оно переоценивает представление.

У меня вопрос, как я могу сделать это безопасным, чтобы он был выпущен, только если он еще не выпущен?

1 Ответ

6 голосов
/ 08 января 2010

Вы изменяете массив во время итерации по нему. Это тонко, но поскольку removeFromSuperview удаляет его из списка подпредставлений, вы меняете массив. Измените свой код на это,

NSArray *subviews = [scrollView.subviews copy];
for (UIView *view in subviews) {
    [view removeFromSuperview];
}
[subviews release];

и с тобой все будет в порядке.

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