これは、呼び出し元が所有するオブジェクトを返すか、呼び出し元が所有していないオブジェクト(たとえば、自動解放されたオブジェクト)を返すかの両方の方法で実行できます。選択する戦略にかかわらず、命名規則に従ってください。たとえば、
- (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];
}
リターン呼び出し側によって所有されていない文字列を
、およびメソッド名がアロケーション、新しい、またはコピーが含まれていません。戻り値はオートリリースされているため、呼び出し側が明示的に保持しない限り、対応するオートリリースプールが排水されたときに解放されます。
あなたの特定のシナリオでは、呼び出し元が所有していないオブジェクトを返す2番目の戦略は、より良い解決策のように見えます。呼び出し元は、オブジェクトを即座に処理する(オブジェクトを所有することに関心がないように)か、またはプロパティ(コピーまたは保持プロパティのいずれかである可能性が高い)に保持することが最も一般的です。
@ピートの質問の最初の部分は間違っています。 – kubi
autoreleaseに置いた場合にどのような問題が起こるか説明できますか?私は本当に問題が表示されません? –
実際に私は、ピートはちょうどそれを得たと思う。規約では、new、allocまたはcopyで始まらないメソッドは、自動解放されたオブジェクトを返すべきです。このメソッドの呼び出し元は、それを保持したい場合、それを保持する責任があります。 –