Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 使用公共只读getter发布iVar_Iphone_Objective C_Ios_Memory Management - Fatal编程技术网

Iphone 使用公共只读getter发布iVar

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

如何使用公共只读属性释放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中解除锁定的方法是使用getter方法将所有强属性设置为nil。由于变量被公开声明为“readonly”,因此编译器将不允许使用getter方法。根据我对ARC的了解,将iVar设置为nil可以在底层代码中调用release。这是正确的吗


谢谢你的帮助

当您将其设置为nil时,您告诉编译器您没有对它的进一步引用,它将为您添加版本。事实上,它的readonly仅仅意味着外部类无法访问它,但它仍然是一个强引用,因此您需要去掉该引用,才能正确地发布它。您不能使用self.someArray访问它,因为使用self是通过属性名而不是成员变量访问它。

因此,如果我正确理解您的意思,您的意思是说“\u someArray=nil”确实正确地告诉操作系统释放对象?是的,因为它预编译ARC应该为您放置适当的释放版本。