我如何测试__attribute __((objc_precise_lifetime))?

时间:2015-02-01 07:01:33

标签: objective-c automatic-ref-counting llvm

我试图理解__attribute__((objc_precise_lifetime)) / NS_VALID_UNTIL_END_OF_SCOPE在不同情况下的确切行为。这是我尝试的最小“工作”示例(显示可能需要的地方):

@interface Foo : NSObject @end
@implementation Foo
- (instancetype)init {
    NSLog(@"Foo init");
    return [super init];
}
- (void)dealloc {
    NSLog(@"Foo dealloc");
}
@end


int main() {
    @autoreleasepool {
        Foo *foo = [Foo new]; // might need NS_VALID_UNTIL_END_OF_SCOPE...
        id __weak weakFoo = foo;

        NSLog(@"Foo: %@", foo);
        // foo is no longer used at this point, so it could be released

        NSLog(@"Weak foo: %@", weakFoo);
    }
    return 0;
}

但输出是:

Foo init
Foo: <Foo: 0x10020ba00>
Weak foo: <Foo: 0x10020ba00>
Foo dealloc

所以似乎ARC正在自动释放对象(即使启用了优化)。我如何构建一个简单的情况,ARC将积极释放一个不再使用的对象?

0 个答案:

没有答案