0

我试图了解下面的吸气剂中发生了什么,这是我到目前为止所了解的:

(1) getter 返回一个指向 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];
}

编辑:我认为我对实际保留和稍后发布的原因感到更加困惑。我的理解是,getter 只是返回了一个指向 nil 或已经存在的对象(即由 setter 设置)的指针释放,这只是一个故障保险,以防我后来忘记释放 NSString 对象?

实例变量planetName也在我的dealloc方法中释放(见下文)自动释放似乎也在做同样的事情,只是稍后池被耗尽时?

- (void)dealloc {
        [planetName release];
        [super dealloc];
}

干杯-加里-

4

3 回答 3

4

让 Objective-C 将其作为属性处理可能是个好主意,让您清理一些实现以保持内存管理,嗯,可管理:

@interface PlanetClass : NSObject {
    NSString* planetName;
}
@property(nonatomic, retain) NSString* planetName;
@end // PlanetClass

@implementation PlanetClass
@synthesize planetName
//... rest of PlanetClass here
@end // PlanetClass

大量在线文档 用于了解有关 Objective-C 属性和.@synthesize

内存管理文档

我强烈推荐这本来自 Apple 的关于内存管理的读物,以尝试帮助理解retain/ releasehubbub 的全部内容。

于 2009-09-10T19:20:09.300 回答
1

当自动释放被发送到一个对象时,它被添加到自动释放池中。当池耗尽时,它会向池中的所有对象发送释放。因此,自动释放池中的任何对象都将在池耗尽时被释放

于 2009-09-10T19:09:17.430 回答
-1

getter 方法中的 return/autorelease 没有做任何事情,你可以直接返回planetName

于 2009-09-10T20:31:31.590 回答