alibaba/VirtualView-iOS

VVGridView的setUpdateDelegate:方法存在隐患

Closed this issue · 4 comments

if (self.gridContainer.superview==nil) {

- (void)setUpdateDelegate:(id<VVWidgetAction>)delegate{
    if (self.drawLayer==nil) {
        self.drawLayer = [VVLayer layer];
        self.drawLayer.drawsAsynchronously = YES;
        self.drawLayer.contentsScale = [[UIScreen mainScreen] scale];
        self.drawLayer.delegate =  (id<CALayerDelegate>)self;
        [self.gridContainer.layer addSublayer:self.drawLayer];
    }
    for (VVViewObject* subObj in self.subViews) {
        subObj.updateDelegate = (id<VVWidgetAction>)self.gridContainer;
    }
}

其中if (self.drawLayer==nil)永远为NO,因为继承的VVLayout会保证self.drawLayer有值

然后

subObj.updateDelegate = (id<VVWidgetAction>)self.gridContainer

非常危险,因为self.gridContainer 没有实现VVWidgetAction

同理VVPageView也有这个问题

收到,这是 Layout 重构进行到一半导致的 bug,会在重构中尽快解决。

1ddad86 将 drawLayer 稍微改进了下,不过不确定是否完全解决了此问题

release 1.2.2 已解决