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でdeallocする方法は、getterメソッドを使用してすべての強力なプロパティをnilに設定していることを理解しています。変数は「読み取り専用」として公に宣言されているため、コンパイラーはgetterメソッドの使用を許可しません。そして、私がARCについて知っていることから、iVarをnilに設定すると、基礎となるコードでreleaseを呼び出すことができます。これは正しいです?

助けてくれてありがとう!

4

1 に答える 1

3

これをnilに設定すると、それ以上の参照がないことをコンパイラーに通知し、リリースが追加されます。読み取り専用というのは、外部クラスがアクセスできないことを意味しますが、それでも強力な参照であるため、適切に解放するには、その参照を削除する必要があります。selfを使用すると、メンバー変数ではなくプロパティ名を介してアクセスするため、self.someArrayを使用してアクセスすることはできません。

于 2012-08-31T17:36:00.790 に答える