Как обрабатывать возвращаемый объект из функции, чтобы избежать утечек памяти? - PullRequest
0 голосов
/ 17 мая 2011

Предположим, у меня есть функция

- (NSString *)fullNameCopy {
    return [[NSString alloc] initWithFormat:@"%@ %@", self.firstName, self.LastName];
}

Может кто-нибудь сказать мне, как вызвать эту функцию, как присвоить ее значение новому объекту и как затем ее освободить, избегая утечек памяти иaccess.

Будет ли это похоже на

NSSting *abc = [object fullNameCopy];

// Используйте его и отпустите

[abc release];

, или я должен также выделить строку abc?

Обновление:

Суть здесь в том, могу ли я вернуть неавтомобильные объекты из функции и затем освободить их в вызывающей функции.В соответствии с соглашениями об именах функций Obj-C, имя функции, содержащее alloc или copy, должно возвращать объект, предполагая, что вызывающая функция имеет владение.

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

Ответы [ 4 ]

2 голосов
/ 28 мая 2011

Вы правы. Поскольку имя метода содержит слово «copy», соглашение Какао требует, чтобы метод возвращал объект, принадлежащий вызывающей стороне. Поскольку вызывающий объект владеет этим объектом, он отвечает за его освобождение. Например:

- (void)someMethod {
    NSString *abc = [object fullNameCopy];

    // do something with abc

    [abc release];
}

Кроме того, вы можете использовать -autorelease вместо -release:

- (void)someMethod {
    NSString *abc = [[object fullNameCopy] autorelease];

    // do something with abc
}
0 голосов
/ 28 мая 2011

Как это:

- (NSString *)fullName {

    NSString * retVal = [[NSString alloc] initWithFormat:@"%@ %@", self.firstName, self.LastName];

    return [retVal autoRelease];
}

Тогда

NSSting * abc = [имя объекта полное];

0 голосов
/ 17 мая 2011

return [[[NSString alloc] initWithFormat: @ "% @% @", self.firstName, self.LastName] autorelease];

0 голосов
/ 17 мая 2011

Ссылка это сообщение

ОБНОВЛЕНИЕ:

- (NSString *)fullNameCopy {
    NSString *returnString  = [NSString stringWithFormat:@"%@ %@", self.firstName, self.LastName]; // Autorelease object.
    return returnString;
}

-(void) someFunction {
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

    NSString *fullName = [self fullNameCopy];

    [pool release]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...