Сбой iOS-приложения - не уверен, что искать дальше - PullRequest
0 голосов
/ 19 марта 2012

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

- (void)dealloc
{
    myWebView.delegate = nil;  // Thread 1 stopped at breakpoint 1
}

В консоли это говорит:

[Switching to process 621 thread 0x13b03]
[Switching to process 621 thread 0x18703]
[Switching to process 621 thread 0x11903]

Очевидно, я 'Мы сделали какую-то ошибку, но что нужно для следующего места?Я использую ARC.

thx

edit 1

This GDB was configured as "x86_64-apple-darwin".sharedlibrary apply-load-rules all
Attaching to process 974.
Pending breakpoint 1 - ""WebViewController.m":57" resolved
2012-03-19 08:11:05.888 SpotFinder[974:11903] Latitude = 37.785834
2012-03-19 08:11:05.889 SpotFinder[974:11903] Latitude = -122.406417
2012-03-19 08:11:06.030 SpotFinder[974:11903] here is a log of places 33
2012-03-19 08:11:11.030 SpotFinder[974:11903] You selected index_path: <NSIndexPath 0x705c0d0> 2 indexes [0, 2]
[Switching to process 974 thread 0x13a03]
[Switching to process 974 thread 0x15e03]
[Switching to process 974 thread 0x13a03]
[Switching to process 974 thread 0x11903]
Current language:  auto; currently objective-c
(gdb)

edit 2 трассировка стека:

enter image description here

Ответы [ 2 ]

0 голосов
/ 19 марта 2012

При использовании ARC вы можете определить метод dealloc для удаления ссылок и очистки ресурсов, но вам не следует явно вызывать [super dealloc].

См. ARC Enforces New Rules , которыйявляется частью Переход к примечаниям к выпуску ARC .

Вы не можете явно вызывать dealloc или реализовывать или вызывать retain, release, retainCount или autorelease.Запрет распространяется на использование @selector (retain), @selector (release) и т. Д.

Вы можете реализовать метод dealloc, если вам нужно управлять ресурсами, отличными от освобождения переменных экземпляра.Вам не нужно (на самом деле вы не можете) освобождать переменные экземпляра, но вам может потребоваться вызвать [systemClassInstance setDelegate: nil] для системных классов и другого кода, который не скомпилирован с использованием ARC.

CustomМетоды dealloc в ARC не требуют вызова [super dealloc] (это фактически приводит к ошибке компилятора).Привязка к супер автоматизирована и обеспечивается компилятором.

Вы все еще можете использовать CFRetain, CFRelease и другие связанные функции с объектами в стиле Core Foundation (см. «Управление бесплатными мостами»).

0 голосов
/ 19 марта 2012

Никогда не вызывайте dealloc напрямую, независимо от того, находится ли он в среде, отличной от ARC, или с включенной ARC.

Если вы не используете ARC, вы вызываете release, тогда dealloc вызывается системой для этого конкретного объекта.

Dealloc с включенным ARC вызывается (снова системой), когда на этот объект больше нет ссылок.

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