iOS:自动释放后发布

时间:2012-01-10 13:42:35

标签: ios

这可能不对......或者可能是。我正在查看名为ShareKit的源代码,由一些名叫Nathan的人编写,我注意到他自动发布了一个视图,后来在dealloc中,他发布了。

2 个答案:

答案 0 :(得分:1)

不确定为什么你认为这是错误的。例如,这是完全有效的代码,它表现出与您所看到的相同的东西:

@interface SomeClass : NSObject

@property (nonatomic, retain) NSNumber *someNumber;

@end

@implementation SomeClass

@synthesize someNumber;

- (id)init {
    if ((self = [super init]])) {
        self.someNumber = [[[NSNumber alloc] initWithInt:5] autorelease]; // retain count = 1 (alloc) - 1 (on next drain) + 1 (retaining property) = 1
    }
}

- (void)dealloc {
    [someNumber release]; // retain count = 0
    [super dealloc];
}

@end

release之后autorelease发生了什么问题。

另一部分有效的代码(虽然完全没有意义!):

NSNumber *someNumber = [[NSNumber alloc] initWithInt:5]; // retain count = 1
[someNumber retain]; // retain count = 2
[someNumber autorelease]; // retain count = 2 (-1 on next drain) = 1
[someNumber release]; // retain count = 1 (-1 on next drain) = 0

答案 1 :(得分:0)

不,没有; 自动释放池只会为它上面列出的每个实例调用一个版本。