Это утечки:
[self.naw_rows addObject: [[CellModel alloc] initialize:@"name" title:@"Name" value: self.currentProfile.name]];
Вы являетесь владельцем объекта, возвращаемого alloc-init, и вы несете ответственность за отказ от владения им, отправив ему сообщение release
или autorelease
, чего не смогли сделать.
Использование временной переменной, как вы предлагаете, решает проблему:
CellModel *model = [[CellModel alloc] initialize:@"name" title:@"Name" value: self.currentProfile.name];
[self.naw_rows addObject: model];
[model release];
Итак, почему анализатор жалуется? Из-за имени вашего инициализатора. Переименуйте его в что-то вроде initWithName:title:value:
, и вы увидите, что «Неверное уменьшение счетчика ссылок на объект, который в данный момент не принадлежит вызывающей стороне» исчезнет.
Соглашение состоит в том, что имя методов инициализатора должно начинаться с сокращения init
.
Кроме того, реализация вашего класса не присваивает self результат вызова инициализатора super. Это:
if (self == [super init])
должно быть:
if ((self = [super init]))
или, если вы предпочитаете:
self = [super init];
if (self)
Кроме того, управление памятью переменных экземпляра класса CellModel
является неправильным. Вам следует сохранить или скопировать объекты, переданные в качестве аргументов, в метод init, а также освободить их в dealloc.
Методы доступа также нарушают соглашения об именах , они должны называться просто name
, title
и т. Д. Префикс "get" предназначен только для методов, которые возвращают объекты косвенно.