4

I have the following code inside a method:

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

Under ARC, will self get retained by the block because image is a property of self? Who owns imageBlk? Self?

4

3 回答 3

2

self被块保留吗?不,它不会。该imageBlk变量不是实例变量,因此块不需要保留self。在您发布的代码中无需担心保留周期。

谁拥有imageBlk imageBlk是堆栈变量。该块将保留变量。ARC 负责这种保留,并在适当的时候适当地释放它。

谁拥有self我们无法从这段代码中回答这个问题。曾经分配过该对象的人将拥有它。曾经保留它的人也拥有它。

于 2013-01-28T16:13:38.063 回答
0

不,asimageBlk不一样self.imageimageBlk是一个局部变量,不属于任何人。imageBlk块内部是一个只读副本,imageBlk而不是同一个变量。如果你希望它是同一个变量,你必须使用__block声明。

于 2013-01-28T15:29:57.043 回答
0

代码很好。在块外声明的变量是只读的,你不能改变它的值。
但是......你不会改变价值!您只需在值上“调用一个方法”,即 [imgBlock setHideen:YES];
完全合法。一切都将完美无缺。Block 将根据需要保留 imgView。

于 2013-01-28T16:02:45.330 回答