メソッド内に次のコードがあります。
UIImageView* imageBlk = self.image;
self.finishBlock = ^{
imageBlk.hidden = YES;
}
ARCでは、画像は自己の所有物であるため、自己はブロックによって保持されますか?imageBlkの所有者は誰ですか?自己?
メソッド内に次のコードがあります。
UIImageView* imageBlk = self.image;
self.finishBlock = ^{
imageBlk.hidden = YES;
}
ARCでは、画像は自己の所有物であるため、自己はブロックによって保持されますか?imageBlkの所有者は誰ですか?自己?
selfブロックによって保持されますか?いいえ、それはしません。変数はimageBlkインスタンス変数ではないため、ブロックはを保持する必要はありませんself。投稿されたコードに保持サイクルの心配はありません。
誰が所有していimageBlkますか? imageBlkスタック変数です。ブロックは変数を保持します。ARCはこの保持を処理し、必要に応じて適切に解放します。
誰が所有していselfますか?このコードからは答えられません。オブジェクトを割り当てた人は誰でもそれを所有します。それを保持したことがある人もそれを所有しています。
いいえ、とimageBlk同じではありませんself.image!imageBlkはローカル変数であり、誰も所有していません。ブロック内には、同じ変数ではなく、imageBlkの読み取り専用コピーがあります。imageBlk同じ変数にしたい場合は、__block宣言を使用する必要があります。
コードは問題ありません。ブロック外で宣言された変数は読み取り専用であり、その値を変更することはできません。
しかし...あなたは値を変更しないでください![imgBlock setHideen:YES]である値に対して「メソッドを呼び出す」だけです。
完全に合法です。すべてが完璧に動作します。ブロックは、必要な限りimgViewを保持します。