これは、Objective-C のメモリ管理に関する質問です。
About Memory Managementページにいくつかの例があります
- (NSString *)fullName {
NSString *string = [[[NSString alloc] initWithFormat:@"%@ %@",
self.firstName, self.lastName] autorelease];
return string;
}
そして2つ目
- (NSString *)fullName {
NSString *string = [NSString stringWithFormat:@"%@ %@",
self.firstName, self.lastName];
return string;
}
唯一の違いは、最初の例では初期化子が呼び出され、2 番目の例ではクラス ファクトリ メソッドが呼び出されることです。
基本的なメモリ管理規則のセクションでは、alloc
呼び出しの後、割り当てたオブジェクトを所有すると言われています。したがって、最初の例では、オブジェクトを割り当て、同時に初期化しています。これで私はオブジェクトを所有し、それをしなければなりませrelease
ん。2 番目の例では、そうではありません。しかし、ファクトリ メソッドstringWithFormat:
は 1 回の呼び出しで同じことを行うのではないでしょうか。つまり、オブジェクトを割り当てて初期化するということです。
主な質問は、2 番目の例でオブジェクトを解放する必要がないのはなぜですか? クラスファクトリメソッドを実装する際に特別なメモリ管理規則はありますか?