Помощь по отладке iphone - смотрите, когда объекты выпущены? - PullRequest
0 голосов
/ 09 августа 2009

У меня есть несколько способов разработки моего первого приложения для iphone, и я часто сталкиваюсь с exc_bad_access. (Я уверен, что это потому, что я пока не проектирую вещи в очень хорошем MVC-стиле.)

Крайне неприятно пытаться выяснить, почему я все время сталкиваюсь с этими ошибками ... есть ли в отладчике xcode способ отслеживать список указателей, чтобы вы могли видеть, когда находятся различные объекты? вышел? Что-нибудь, что-нибудь, что может дать мне больше визуального понимания того, почему мой дизайн программы несовершенен?

В частности, у меня продолжаются проблемы с моим классом "webobject", в который я обернул все свои методы NSURLConnection. Когда я пытаюсь вызвать executeselector к контроллеру представления, который инициировал запрос "webobject", я продолжаю получать exc_bad_access, когда Я пытаюсь получить доступ к синтезированным свойствам веб-объекта. Есть ли что-то в корне неверное в моем представлении о том, что я должен обернуть все свои методы, связанные с веб-сервисом, в класс, который я могу импортировать куда угодно?

Ответы [ 4 ]

1 голос
/ 20 августа 2009

В итоге я прочитал о NSZombieEnabled, который помог мне отследить эти сообщения exc_bad_access. Больше информации здесь: http://www.cocoadev.com/index.pl?NSZombieEnabled

1 голос
/ 09 августа 2009

Вы можете попробовать создать точку останова на -[NSObject dealloc] (или на том же методе для подкласса, на который вы нацелены).

Я бы также отослал вас к одному из множества руководств по обработке памяти Какао.

1 голос
/ 09 августа 2009

Дэйв,

Я не знаю, как отследить освобождение объектов (особенно нативных объектов, таких как NSStrings). Но я столкнулся с подобным изобилием сообщений exc_bad_access при запуске программирования Objective-C. Но однажды я прочитал кое-что, что очень помогло мне избавиться от этих сообщений:

Если вы создаете объект, используя alloc, copy или метод, начинающийся с new, то это ваш объект для управления и освобождения. Вы можете вызвать retain и release, и этот цикл будет работать, как ожидается, для этих объектов. Если вы никогда не вызовете release или dealloc для него, он будет зависать вечно и будет утечкой. Если вы вызываете метод, похожий на stringWithFormat, numberWithYadaYada, тогда этот объект устанавливается для автоматического выпуска. Это означает, что как только вы выйдете из метода, который его использует, он может быть освобожден. Поэтому, если вы вызвали один из этих методов автоматического выпуска, вы должны сохранить его, если хотите увидеть его позже.

Я подозреваю, что ваш делегат или NSURLConnection автоматически освобождаются, что является причиной ваших сообщений о плохом доступе.

Jack

0 голосов
/ 10 августа 2009

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

соответствующий вопрос о переполнении стека

...