4

メソッド内に次のコードがあります。

UIImageView* imageBlk = self.image;
self.finishBlock = ^{
    imageBlk.hidden = YES;
}

ARCでは、画像は自己の所有物であるため、自己はブロックによって保持されますか?imageBlkの所有者は誰ですか?自己?

4

3 に答える 3

2

selfブロックによって保持されますか?いいえ、それはしません。変数はimageBlkインスタンス変数ではないため、ブロックはを保持する必要はありませんself。投稿されたコードに保持サイクルの心配はありません。

誰が所有していimageBlkますか? imageBlkスタック変数です。ブロックは変数を保持します。ARCはこの保持を処理し、必要に応じて適切に解放します。

誰が所有していselfますか?このコードからは答えられません。オブジェクトを割り当てた人は誰でもそれを所有します。それを保持したことがある人もそれを所有しています。

于 2013-01-28T16:13:38.063 に答える
0

いいえ、とimageBlk同じではありませんself.imageimageBlkはローカル変数であり、誰も所有していません。ブロック内には、同じ変数ではなく、imageBlkの読み取り専用コピーがあります。imageBlk同じ変数にしたい場合は、__block宣言を使用する必要があります。

于 2013-01-28T15:29:57.043 に答える
0

コードは問題ありません。ブロック外で宣言された変数は読み取り専用であり、その値を変更することはできません。
しかし...あなたは値を変更しないでください![imgBlock setHideen:YES]である値に対して「メソッドを呼び出す」だけです。
完全に合法です。すべてが完璧に動作します。ブロックは、必要な限りimgViewを保持します。

于 2013-01-28T16:02:45.330 に答える