Auto Layout性能?那试一下简便的Frame写法。

之前一直采用的Auto Layout,直到有一天写了一个复杂界面,然后iPhone 6p没加载出来。。。是的, 没加载出来。。。

所以我就查阅了一下相关文献,有一篇《从 Auto Layout 的布局算法谈性能》比较清晰的解释了Auto Layout的弊端。

但是呢传统的Frame为了适配复杂机型,写起来也非常费劲。所以我尝试写一个简单易用的Frame layout。

先附上我的一个Demo

此Demo只是提出一个初级设想,只是有几个简单的用法

例如

因为这是我的一个使用习惯 ,所以我就这么写了。

另外我重写了 layoutSubviews方法,视图改变的时候,frame会重新计算,不是传统的那种frame布局,里面做了一些计算,当然现在比较初级。

+ (void)load
{
    Method origMethod = class_getInstanceMethod([self class], @selector(layoutSubviews));
    Method swizMethod = class_getInstanceMethod([self class], @selector(_elLayoutSubViews));
    method_exchangeImplementations(origMethod, swizMethod);
}
- (void)elLayout // 所有的写法都是保存在ELLayout对象里面
{
    ELLayout * l = objc_getAssociatedObject(self, &key_view_tool_layout);
    if (l) {
        self.frame = l.frame;
    }
}

- (ELLayout *)_layoutFile
{
    ELLayout * l = objc_getAssociatedObject(self, &key_view_tool_layout);
    if (l == nil) {
        l = [[ELLayout alloc] initWithView:self];
        objc_setAssociatedObject(self, &key_view_tool_layout, l, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
    }
    return l;
}

- (void)_elLayoutSubViews // 这里是替换的方法,layoutsubviews的时候要计算Frame
{
    [self _elLayoutSubViews];
    for (UIView * v in self.subviews) {
        [v elLayout];
    }
}

但是这种写法的代码性能具体怎么样,我还具体不知道,代码公布出来也是供各位大神指点一下。

如果可行的话,后面会陆续添加一些frame缓存,异步计算等优化。还有一个 最关键的问题动画。

猜你喜欢

转载自blog.csdn.net/evol_f/article/details/83178661