iOS经典问题
2016-02-18 本文已影响187人
yafengxn
-
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不存在这个问题)
方法1self.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类型元素,编译器就会弹出类型不匹配的提示,不会报错。