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 *)array

    • 3.1 OC只能在运行过程中确定array中元素类型,所以无法在编译过程中查出传入数据的合理性,编译过程不报错。
    • 3.2 OC作为一门动态语言只在运行时确定每种对象的类型,但是我们可以通过添加的方法在编译期提示传入的参数不匹配,当我们在方法内部使用该array对象,为其添加一个NSNumber类型元素,编译器就会弹出类型不匹配的提示,不会报错。

你可能感兴趣的:(iOS经典问题)