0

私はゲッターにこれをさせました:

@synthesize sheet = _sheet;

-(CCSpriteBatchNode *)sheet {
    if (!_sheet) {
        _sheet = [CCSpriteBatchNode batchNodeWithFile:@"image.png" capacity:500];
        [self addChild:_sheet];
    }
    return _sheet;
}

しかし、私の質問は、このプロパティを宣言する適切な方法は何ですか?

私のインターフェースでは、次のことを行いました。

@property (readonly, unsafe_unretained) CCSpriteBatchNode *sheet;

これは「読み取り専用」なので、これを強く参照する必要はないと思ったので、混乱して考えました。それは、リリースされる可能性があることを意味します。これは強力なはずです。iOS4をサポートするためにweakではなくunsafe_unretainedを使用しました...

4

1 に答える 1

0

「読み取り専用」プロパティは、プロパティの値を変更するセッター関数がないことを意味します。それは「強い」対「弱い/unsafe_unretained」とは何の関係もありません。

誰かがオブジェクトを使用しているときにオブジェクトが解放されないようにするには、プロパティを「strong」と宣言する必要があります。

あなたの特定のケースでは、selfおそらく_sheetのために保持される[self addChild:_sheet]ので_sheet、少なくともself。ただし、プロパティを「unsafe_unretained」として宣言し、別のクラスが次の方法で値を取得する場合

CCSpriteBatchNode *theSheet = yourWhatEver.sheet;

theSheet割り当てが解除されるとすぐに無効なポインタになりますyourWhatEver

于 2012-08-25T09:16:37.827 に答える