xcode, проанализировать ошибку на alloc - PullRequest
1 голос
/ 07 октября 2011

Я получил сообщение об ошибке, но не уверен, как от него избавиться.

-- Method returns an Objective-C object with a +1 retain count (owning reference)

и

--Object allocated on line 46 is not referenced later in this execution path and has a retain count of +1 (object leaked)

для линий ААА и BBB

+ ( CustConf* ) initEmptyCustConf { 
    CustConf* theObject = [[CustConf alloc] init];
    theObject.ID = 0;
    theObject.aAA= [[NSString alloc] initWithString:@""];
    theObject.Number_Ndx = 0;
    theObject.bBB = [[NSString alloc] initWithString:@""];

    return [theObject autorelease];
}

Ответы [ 2 ]

1 голос
/ 07 октября 2011

Я предполагаю, что вы определили сохраненные свойства для класса CustConf. Поскольку объект автоматически сохранит строки aAA и bBB, а вы не освободили их в коде до завершения метода, в результате произойдет утечка памяти.

+ ( CustConf* ) initEmptyCustConf { 
    CustConf* theObject = [[CustConf alloc] init];
    theObject.ID = 0;
    theObject.aAA= [[NSString alloc] initWithString:@""]; //potential leak
    theObject.Number_Ndx = 0;
    theObject.bBB = [[NSString alloc] initWithString:@""]; //potential leak

    return [theObject autorelease];
}

Чтобы исправить это, вам нужно явно освободить строки, присвоенные theObject.aAA и theObject.bBB через release / autorelease, или просто использовать строковые константы.

+ ( CustConf* ) initEmptyCustConf { 

   CustConf* theObject = [[CustConf alloc] init];
    theObject.ID = 0;
    theObject.aAA= @"";
    theObject.Number_Ndx = 0;
    theObject.bBB = @"";

    return [theObject autorelease];
}

Кроме того, если ваш метод начинается с "init", то обычно возвращается возвращенный объект, поэтому либо удалите авто-релиз в конце, либо измените имя метода, чтобы отразить природу вашего метода.

1 голос
/ 07 октября 2011

[[NSString alloc] initWithString:@""]; не требуется.Просто используйте @"".

Измените initEmptyCustConf на это:

+ (CustConf *) initEmptyCustConf { 
    CustConf *theObject = [[CustConf alloc] init];
    theObject.ID = 0;
    theObject.aAA = @"";
    theObject.Number_Ndx = 0;
    theObject.bBB = @"";
    return [theObject autorelease];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...