Любой код в наконец, работал в даже в случае необработанного исключения. Обычно наконец код используется для чистки локальных объявлений неуправляемого кода с помощью .dispose ().
Часть «0x0» - это адрес памяти. В частности, «nil», что означает, что ваш изменяемый массив не существует в момент его вызова. Попробуйте создать его в вашем методе -init:
categories = [[NSMutableArray alloc] init];
Не забудьте освободить его в вашем -dealloc.