iOS经典问题

  • 1.为什么iOS的Masonry中的self不会循环引用?

    • http://www.jianshu.com/p/1c8b8a584910
    • block是一个对象,传入make_constraints:方法中的block是地址传递,没有进行拷贝,所以此时block是存在于栈上的,block中对self或者self.view存在强引用(而self或者self.view对block并不存在强引用),所以不会产生循环引用。当block生命周期结束时,对self或者self.view的强引用release掉
  • 2.圆角的图片的优化

    • 将图片变成圆角核心在于:防止频繁礼品渲染所引起的上下文切换,这样我们就要把要显示的内容(通常是不变的内容)缓存起来。
  • 缓存方法(针对UIImageView显示图片的情况,UIView不存在这个问题)
    方法1

    self.layer.shouldRasterize = YES;
    self.layer.rasterizationScale = [UIScreen mainScreen].scale;
    
    当使用如下方式设置圆角,并且图片较多时,加上上述两句代码可明显提高帧数,原理就是shouldRasterize 将要显示的内容缓存起来,下次直接显示。
    self.imageView1.layer.cornerRadius = self.imageView1.frame.size.width * 0.5;
    self.imageView1.layer.masksToBounds = YES;
    

    方法2
    使用绘图方法将图片裁剪为圆形并'缓存'起来,后边直接用。
    方法3
    使用遮罩将一个镂空的图形图片盖在要显示的图片上,实现圆角,缺点:图片为单色背景会比较好。

  • 3.-(void)setProduct:(NSMutableArray<NSString *> *)array

    • 3.1 OC只能在运行过程中确定array中元素类型,所以无法在编译过程中查出传入数据的合理性,编译过程不报错。
    • 3.2 OC作为一门动态语言只在运行时确定每种对象的类型,但是我们可以通过添加<type>的方法在编译期提示传入的参数不匹配,当我们在方法内部使用该array对象,为其添加一个NSNumber类型元素,编译器就会弹出类型不匹配的提示,不会报错。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 转载:http://www.jianshu.com/p/32fcadd12108 每个UIView有一个伙伴称为l...
    F麦子阅读 11,469评论 0 13
  • 作者si1ence2016.05.20 10:24* http://www.jianshu.com/p/bc3f8...
    Kiddz阅读 4,944评论 0 12
  • 物理内存虚拟内存的关系、堆栈、 比如工作环境,薪资待遇,要不要加班,主要工作内容,要用到什么技术,团队有没有什么缺...
    nlpjoe阅读 4,968评论 0 8
  • 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥ios动画全貌。在这里你可以看...
    每天刷两次牙阅读 12,711评论 6 30
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,312评论 30 472