質問
以下のゲッターで何が起こっているのかを理解しようとしていますが、これはこれまでのところ理解していることです:
(1)ゲッターはNSStringオブジェクトへのポインターを返します。 (2)NSStringオブジェクトは保持されています。おそらく、そのオブジェクトへのポインタを渡したばかりだからです。 (3)自動リリース?いつアクティブになり、PlanetClassインスタンスが割り当て解除(リリース)されるのですか?
// CLASS
@interface PlanetClass : NSObject {
NSString *planetName;
}
- (NSString *)planetName;
- (void)setPlanetName:(NSString *)value;
@end
// GETTER
- (NSString *)planetName{
return[[planetName retain] autorelease];
}
編集:実際の保持と今後のリリースの理由に関して、私はもっと混乱していると思います。私の理解では、ゲッターは単にnilまたはすでに存在する(つまりセッターによって設定された)オブジェクトへのポインタを返したということでした。リリース、それは私が後でNSStringオブジェクトをリリースするのを忘れた場合のフェイルセーフですか?
インスタンス変数planetNameもdeallocメソッドでリリースされます(以下を参照)。自動リリースは、プールが空になった直後に同じことをしているようです。
- (void)dealloc {
[planetName release];
[super dealloc];
}
歓声-gary-
解決
Objective-Cでこれをプロパティとして処理し、実装の一部をクリーンアップしてメモリ管理を管理しやすくすることをお勧めします:
@interface PlanetClass : NSObject {
NSString* planetName;
}
@property(nonatomic, retain) NSString* planetName;
@end // PlanetClass
@implementation PlanetClass
@synthesize planetName
//... rest of PlanetClass here
@end // PlanetClass
@synthesize
。
メモリ管理ドキュメント
メモリ上のAppleからの読み取りを強くお勧めします管理を使用して、 retain
/ release
hubbubのすべての内容を理解します。
他のヒント
自動解放がオブジェクトに送信されると、自動解放プールに追加されます。プールが空になると、プール内のすべてのオブジェクトに解放が送信されます。そのため、プールが空になると、自動解放プール内のオブジェクトが解放されます
ゲッターメソッドのreturn / autoreleaseは何もしていません。単に planetName