如何使用公共只读属性使用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。这是对的吗?
感谢您的帮助!
答案 0 :(得分:3)
当你将它设置为nil时,你告诉编译器你没有进一步的引用,它会为你添加这个版本。事实上,它的readonly只意味着外部类无法访问它,但它仍然是一个强大的参考,所以你需要摆脱该引用才能正确发布它。您无法使用self.someArray访问它,因为使用self是通过属性名称而不是成员变量访问它。