VVGridView的setUpdateDelegate:方法存在隐患
Closed this issue · 4 comments
zekunyan commented
VirtualView-iOS/VirtualView/View/VVGridView.m
Line 440 in 290e444
- (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
zekunyan commented
同理VVPageView也有这个问题
HarrisonXi commented
收到,这是 Layout 重构进行到一半导致的 bug,会在重构中尽快解决。
HarrisonXi commented
1ddad86 将 drawLayer 稍微改进了下,不过不确定是否完全解决了此问题
HarrisonXi commented
release 1.2.2 已解决