Вы можете сделать это обоими способами: либо вернуть объект, который принадлежит вызывающей стороне, либо вернуть объект, который не принадлежит вызывающей стороне (например, объект с автоматическим выпуском).Независимо от выбранной вами стратегии, следуйте соглашениям об именах.Например,
- (NSString *)fullNameCopy {
return [[NSString alloc] initWithFormat:@"%@ %@", self.firstName, self.LastName];
}
возвращает объект NSString
, который принадлежит вызывающей стороне.Имя метода - fullNameCopy
, что соответствует правилам именования: метод, содержащий в своем имени «copy», возвращает объект, принадлежащий вызывающей стороне.Возвращаемое значение не помещается в пул автоматического выпуска.
В качестве альтернативы,
- (NSString *)fullName {
return [NSString stringWithFormat:@"%@ %@", self.firstName, self.LastName];
}
или
- (NSString *)fullName {
NSString *s = [[NSString alloc] initWithFormat:@"%@ %@", self.firstName, self.LastName];
return [s autorelease];
}
возвращает строку, которая не принадлежит вызывающей стороне, иимя метода не содержит alloc, new или copy.Возвращаемое значение автоматически высвобождается, поэтому оно будет освобождено, когда соответствующий пул автоматического высвобождения истощается, если вызывающая сторона явно не решит его сохранить.
При этом в вашем конкретном сценарии вторая стратегия - возвращение объекта,не принадлежит звонящему - выглядит как лучшее решение.Вызывающий объект, скорее всего, либо немедленно обработает объект (поэтому он не будет заинтересован в владении объектом), либо оставит его в свойстве (которое, скорее всего, будет либо копировать, либо сохранять свойство).