メソッド内に次のコードがあります。
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を保持します。