1

如何使用公共只读属性通过 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。由于该变量被公开声明为“只读”,因此编译器将不允许使用 getter 方法。根据我对 ARC 的了解,将 iVar 设置为 nil 确实会在底层代码中调用 release。这个对吗?

谢谢您的帮助!

4

1 回答 1

3

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

于 2012-08-31T17:36:00.790 回答