在这种情况下ARC会自行保留吗?

时间:2013-01-28 15:23:18

标签: iphone ios ipad automatic-ref-counting

我在方法中有以下代码:

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

在ARC下,由于图像是自我属性,因此块会自我保留吗?谁拥有imageBlk?自?

3 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

不,因为imageBlkself.image不同! imageBlk是一个局部变量,不属于任何人。块内的imageBlkimageBlk的只读副本,而不是同一个变量。如果您希望它是同一个变量,则必须使用__block声明。

答案 2 :(得分:0)

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