質問

以下のゲッターで何が起こっているのかを理解しようとしていますが、これはこれまでのところ理解していることです:

(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

があります。 com / d / learn_objectivec / "rel =" nofollow noreferrer "> docs 利用可能の詳細については、オンライン Objective-Cプロパティおよび @synthesize

メモリ管理ドキュメント

メモリ上のAppleからの読み取りを強くお勧めします管理を使用して、 retain / release hubbubのすべての内容を理解します。

他のヒント

自動解放がオブジェクトに送信されると、自動解放プールに追加されます。プールが空になると、プール内のすべてのオブジェクトに解放が送信されます。そのため、プールが空になると、自動解放プール内のオブジェクトが解放されます

ゲッターメソッドのreturn / autoreleaseは何もしていません。単に planetName

を返すことができます
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top