EXC_BAD_ACCESS с partialMockForObject и UIView

У меня проблемы с OCMock и UIView.

У меня есть такой код:

UIView *view1 = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 10, 10)];
id view1Mock = [OCMockObject partialMockForObject:view1];

[[[view1Mock expect] andForwardToRealObject] removeFromSuperview];

... something ...

[view1Mock verify];

И я действительно часто получаю EXC_BAD_ACCESS на [[[view1Mock expect] andForwardToRealObject] removeFromSuperview]. Но не каждый раз. Это очень раздражает, потому что я не могу отследить это до строки на OCMock, и это происходит не каждый раз.

Есть идеи?

РЕДАКТИРОВАТЬ:

Я использую новый компилятор Apple LLVM 3.0 с включенным ARC, и я думаю, что это может быть причиной. Но я хотел бы это исправить. Кто-нибудь пробовал компилировать OCMock с помощью ARC?

С наилучшими пожеланиями, Даниэль


person Kie    schedule 14.11.2011    source источник
comment
У меня возникает точно такая же проблема. Это происходит только время от времени, и я просто издеваюсь над UIView, как и вы. Единственная разница в том, что я получаю EXC_BAD_ACCESS, когда мой код приложения пытается добавить фиктивный объект в качестве подпредставления.   -  person jaker    schedule 01.08.2014


Ответы (2)


Поскольку removeFromSurperview — это метод пользовательского интерфейса, возможно, его следует выполнять в основном потоке.

С уважением,

person Quentin    schedule 08.12.2011

Строка, в которой вы иногда получаете EXC_BAD_ACCESS, может указывать на причину проблемы. Хотя это не точно. Ошибочный код может быть в другом месте.

Конечно, ваш код выше выглядит нормально. Пока вы делаете release на view1 в какой-то момент позже.

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

Итак, чтобы найти первопричину проблемы, первым делом нужно запустить Анализатор. Затем используйте инструмент «Утечки» в «Инструментах».

Подробности, а также отличную ссылку о причинах этих ошибок и пошаговые инструкции по их устранению см. в ответах на эти вопросы:

поиск причины EXC_BAD_ACCESS - в Xcode4

Случайный EXC_BAD_ACCESS в месте, которое этого не может быть

person Max MacLeod    schedule 08.12.2011