ARC之前的iOS中的实例变量

时间:2013-08-17 17:14:48

标签: ios objective-c memory-management automatic-ref-counting

在ARC中,默认情况下,所有实例变量和局部变量都对它们指向的对象具有强引用。 我试图了解MRR如何工作并遇到了这个例子。 考虑下面的片段:

// CarStore.h     #import

@interface CarStore : NSObject

- (NSMutableArray *)inventory;
- (void)setInventory:(NSMutableArray *)newInventory;

@end

// CarStore.m
#import "CarStore.h"

@implementation CarStore {
    NSMutableArray *_inventory;
}

- (NSMutableArray *)inventory {
    return _inventory;
}

- (void)setInventory:(NSMutableArray *)newInventory {
    _inventory = newInventory;
}

@end

//回到main.m,让我们创建库存变量并将其分配给CarStore的库存属性:     int main(int argc,const char * argv []){         @autoreleasepool {             NSMutableArray * inventory = [[NSMutableArray alloc] init];             [库存addObject:@“Honda Civic”];

        CarStore *superstore = [[CarStore alloc] init];
        [superstore setInventory:inventory];
        [inventory release];

        // Do some other stuff...

        // Try to access the property later on (error!)
        NSLog(@"%@", [superstore inventory]); //DANGLING POINTER
    }
    return 0;
}

main方法最后一行中的inventory属性是一个悬空指针,因为该对象早先已在main.m中释放。现在,超级市场对象对数组有一个弱引用。

这是否意味着在ARC之前,实例变量默认具有弱引用,我们必须使用retain来声明强引用?

1 个答案:

答案 0 :(得分:0)

在ARC之前,默认情况下它们是__unsafe_unretained。与ARC一起引入了弱点。