美文网首页
IOS面试题(UIView) ----- UIView和CALa

IOS面试题(UIView) ----- UIView和CALa

作者: ShawnAlex | 来源:发表于2022-03-29 10:38 被阅读0次

问题: 请说一下UIView和CALayer有什么关系

图示

UIView里面有个layer属性, 其实指向的就是CALayer类型。实际上UIView的显示部分是由CALayercontents决定的(绘图部分)。例如: UIview的background显示, 其实就是CALayer中contents中backing store显示的位图

  • UIView: 为其提供内容, 处理触摸等事件, 参与响应链
  • CALayer: 负责显示内容contents

接下来我们看一下开辟内存情况

#import <objc/runtime.h>
#import <malloc/malloc.h>

   UIView *v1 = [[UIView alloc] init];
   CALayer *c1 = [[CALayer alloc] init];
    

    NSLog(@"v1对象实际需要的内存大小: %zd", class_getInstanceSize([v1 class]));
    NSLog(@"v1对象实际分配的内存大小: %zd", malloc_size((__bridge const void *)(v1)));
    NSLog(@"c1对象实际需要的内存大小: %zd", class_getInstanceSize([c1 class]));
    NSLog(@"c1对象实际分配的内存大小: %zd", malloc_size((__bridge const void *)(c1)));
开辟大小

可看出CALayer的轻量级要比UIView小很多

我们再看2个例子

Label 例子 Image 例子

也可以看出CALayer量级要小很多, 所以一般的展示, 不涉及响应链情况, 可以用CALayer来代替UIView 已达到减少内存目的

相关文章

网友评论

      本文标题:IOS面试题(UIView) ----- UIView和CALa

      本文链接:https://www.haomeiwen.com/subject/iwlvjrtx.html