使用公共readonly getter释放iVar

时间:2012-08-31 17:30:23

标签: iphone objective-c ios memory-management

如何使用公共只读属性使用ARC释放内存?说我有以下代码:

SomeClass.h:

@interface SomeClass : NSObject
@property (readonly, nonatomic, strong) NSArray* someArray;
@end


SomeClass.m:

#import "SomeClass.h"
@implmentation SomeClass
@synthesize someArray = _someArray;

- (void)dealloc {
    self.someArray = nil;  //causes compiler error because of public readonly
    _someArray = nil;  //does this correctly release the object?
}

@end

我的理解是,你在ARC中dealloc的方式是使用getter方法将所有强属性设置为nil。由于变量是公开声明的“readonly”,因此编译器不允许使用getter方法。根据我所知道的ARC,将iVar设置为nil会在底层代码中调用release。这是对的吗?

感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

当你将它设置为nil时,你告诉编译器你没有进一步的引用,它会为你添加这个版本。事实上,它的readonly只意味着外部类无法访问它,但它仍然是一个强大的参考,所以你需要摆脱该引用才能正确发布它。您无法使用self.someArray访问它,因为使用self是通过属性名称而不是成员变量访问它。