我在方法中有以下代码:
UIImageView* imageBlk = self.image;
self.finishBlock = ^{
imageBlk.hidden = YES;
}
在ARC下,由于图像是自我属性,因此块会自我保留吗?谁拥有imageBlk?自?
答案 0 :(得分:2)
该块会保留self
吗?不会不会。 imageBlk
变量不是实例变量,因此块不需要保留self
。您不必担心已发布的代码中存在保留周期。
谁拥有imageBlk
? imageBlk
是一个堆栈变量。该块将保留变量。 ARC负责这种保留,并在适当的时候正确地释放它。
谁拥有self
?我们无法从此代码中回答这个问题。分配对象的人将拥有它。保留它的人也拥有它。
答案 1 :(得分:0)
不,因为imageBlk
与self.image
不同! imageBlk
是一个局部变量,不属于任何人。块内的imageBlk
是imageBlk
的只读副本,而不是同一个变量。如果您希望它是同一个变量,则必须使用__block
声明。
答案 2 :(得分:0)
代码很好。
在块外声明的变量是只读的,你不能改变它的值
但是......你不会改变它的价值!你只需要在值上“调用一个方法”,即[imgBlock setHideen:YES];
完全合法。一切都会完美无缺。只要需要,Block就会保留imgView。