2 mapmapm MapMapM 于 2013.01.29 10:33 提问

在block中保留的self访问属性问题

根据说明文件,在下面的代码中,保留self是用来保证在block调用时,图片对象运行。但是,我不太明白,单单保存图片就可以保证它不会消失,那么为什么还要保留self呢?

self.finishBlock = ^{
    self.image.hidden = YES;
}

是不是在直接访问图片的时候适用的?

self.finishBlock = ^{
    _image.hidden = YES;
}

1个回答

redCoral_
redCoral_   2013.01.29 14:22
已采纳

block需要保留block中任何捕获到的对象。你的第一个block例子就是:

self.finishBlock = ^{
    [[self image] setHidden:YES];
}

block需要保留self,这样才能正确调用方法,由于block不能单纯的保留图片,因为只有在block执行,图片方法被调用时才能捕获到图片,所以唯一的办法就是保留self。

所以在第二个block例子中:

self.finishBlock = ^{
    self->_image.hidden = YES;
}

重申一遍,self必须保留,这样block执行的时候,才能访问_image ivar正确的值

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!