Iphone 使用公共只读getter发布iVar
如何使用公共只读属性释放ARC内存?假设我有以下代码:Iphone 使用公共只读getter发布iVar,iphone,objective-c,ios,memory-management,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)dea
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中解除锁定的方法是使用getter方法将所有强属性设置为nil。由于变量被公开声明为“readonly”,因此编译器将不允许使用getter方法。根据我对ARC的了解,将iVar设置为nil可以在底层代码中调用release。这是正确的吗
谢谢你的帮助 当您将其设置为nil时,您告诉编译器您没有对它的进一步引用,它将为您添加版本。事实上,它的readonly仅仅意味着外部类无法访问它,但它仍然是一个强引用,因此您需要去掉该引用,才能正确地发布它。您不能使用self.someArray访问它,因为使用self是通过属性名而不是成员变量访问它。因此,如果我正确理解您的意思,您的意思是说“\u someArray=nil”确实正确地告诉操作系统释放对象?是的,因为它预编译ARC应该为您放置适当的释放版本。