1、扩展与分类的区别缓存
一、扩展没有名字,分类有名字性能优化
二、扩展能够添加私有变量和私有方法;分类能够在不改变原有类的基础上,为类添加方法,通常用于为系统类添加方法,不能添加成员变量,若是必定要添加成员变量,能够经过runtime动态添加网络
三、扩展中添加的方法必须实现,分类添加的方法能够不实现框架
2、简要的说明 UIView 的 frame 和 bounds 的区别异步
一、frame是view在父试图中的位置和尺寸,它以父试图左上角为坐标原点性能
二、bounds是基于自身的位置和尺寸,以本身的左上角为坐标原点优化
3、什么是控制器动画
一、凡是继承自UIViewController的都是控制器ui
4、简单的描述控制器的做用spa
一、处理软件界面的各类事情,并负责软件界面的建立和销毁
5、简单的描述下 Storyboard 的做用
一、用来描述软件界面的
6、简单描述父子控件
每一个控件都是一个容器,能容纳小控件,内部小控件是大控件的子控件,大控件是内部小控件的父控件
7、IBOutLet 有什么做用 ?
一、- 被 IBOutlet 修饰的属性能拖线到 Storyboard或xib 中,并且只能修饰属性。
8、IBAction 有什么做用 ?
一、 被 IBAction 修饰的方法能拖线到 Storyboard 或xib中,只能修饰方法返回值类型。
9、 解释下引用资源的时候每一个选项的含义 -
一、copy:勾选 copy,会把资源拷贝一份到项目的文件夹中(建议勾选,由于这样修改项目中的资源不会影响源资源)。
二、- Added folder:若是勾选 Create groups,只会会建立一个虚拟的文件夹,程序打包后,安装包中不存在这个文件夹;若是勾选 Create folder references,真的建立一个文件夹,程序打包后,安装包中真的有这个文件夹。
三、Add to targets:要不要把资源打包到软件安装包中去.必定要勾选,不勾选到时候程序打包后,安装包中没有这个资源。
10、UILabel如何设置自动换行
一、label.numberOfLines = 0;
11、.Character Wrap和Word Wrap的区别
一、character wrap 以字符分割
二、word wrap以单词分割
三、用于label换行是,是以字符换行,仍是以单词换行
12、contentMode的做用
一、通常用来控制图片如何显示
二、contentMode是UIView的属性
typedef NS_ENUM(NSInteger, UIViewContentMode) {
UIViewContentModeScaleToFill, //缩放图片,使图片充满容器,属性会致使图片变形。
UIViewContentModeScaleAspectFit, // 会保证图片比例不变,并且所有显示在ImageView中,这意味着ImageView会有部分空白,不会填充整个区域。
UIViewContentModeScaleAspectFill, // 也会证图片比例不变,可是是填充整个ImageView的,可能只有部分图片显示出来。
//下面的属性都是不会拉伸图片的
UIViewContentModeRedraw, // redraw on bounds change (calls -setNeedsDisplay)
UIViewContentModeCenter, // contents remain same size. positioned adjusted.
UIViewContentModeTop, //将图片放在View中顶部的位置进行调整
UIViewContentModeBottom, //将图片放在View中底部的位置进行调整
UIViewContentModeLeft, //将图片放在View中左边的位置进行调整
UIViewContentModeRight, //将图片放在View中右边的位置进行调整
UIViewContentModeTopLeft, //将图片放在View中左上边的位置进行调整
UIViewContentModeTopRight, //将图片放在View中右上边的位置进行调整
UIViewContentModeBottomLeft, //将图片放在View中左下边的位置进行调整
UIViewContentModeBottomRight, //将图片放在View中右下边的位置进行调整
};
由此能够得出
枚举最前面三个属性是会拉伸(缩放)图片的,其他的属性是不会拉伸图片.
同时能够总结出两点
1.凡是带有scale单词的属性,图片都会被拉伸.
2.凡是带有Ascept单词属性,图片会保持原来的宽高比,即图片不会变形.
最后若是想让图片占满整个父容器,而且不变形,能够采用一种折中的方式
self.leftImageView.contentMode =UIViewContentModeScaleAspectFill; //超出容器范围的切除掉 self.leftImageView.clipsToBounds = YES;
十3、initWithImage:的做用?
一、经过initWithImage:建立imageview,imageview的尺寸默认等于传入的图片的尺寸
十4、如何修改一个控件的 frame 属性
一、经过CGRectFrame修改
二、经过结构体赋值
三、利用临时结构体变量;
十5、如何抽取方法
一、把相同的代码抽取到一个方法中,把要变化的做为参数
十6、经过imageNamed:这个方法加载图片有什么特色
一、图片会产生缓存
二、使用场景:图片较小、使用频率较高
三、须要缓存的图片尽可能放在Images.xcassets
十7、开发如何选择 UILabel,UIImageView,UIButton
一、能用UILabel,UIImageView尽可能用UILabel,UIImageView
,须要和用户交互用UIButton
十8、什么是自定义控件
一、继承自系统的控件写一个本身的控件,目的是封装控件内部的细节
十9、经过代码如何自定义控件
一、新建一个继承 UIView 的类,(所谓自定义控件就是继承系统自带的控件写一个本身的控件)
二、、在initwithframe方法中添加子控件,(保证别人在外面不论是经过 init 仍是initWithFrame 建立都可以添加子控件,由于 init 方法内部会调用initWithFrame)
三、在layoutsubviews设置子控件的frame,由于执行initwightframe方法时,可能父控件尚未frame,因此计算不了子控件的位置和尺寸,而在layoutSubViews 方法,可以拿到当前控件的尺寸
四、提供一个模型属性,重写模型的set方法,保证在别人设置属性的那一刻第一时间拿到数据,设置到子控件上
二10、什么是模型
一、用来存储数据的对象
二、继承自nsobject,在.h文件中声明一些用来存放数据的属性
二11、instancetype 和 id 的区别
一、instancetype和id均可以表明任意类型
二、instancetype只能做为返回值,id能够做为返回值也能够做为参数,也能够定义变量
三、instancetype会进行类型检测,id不会作类型检测
二12、@property的使用策略
一、assign:'基本数据类型'、’枚举‘、’结构体‘等非OC对象
二、weak:OC对象类型(好比NSArray、NSDate、NSNumber、模型类)
三、strong:OC对象类型(好比NSArray、NSDate、NSNumber、模型类)
四、一个对象只要被强引用,就不会销毁
二十3、懒加载的好处
一、用到时才建立
二、只加载一次
二十4、若是是经过 xib 或者 Storyboard 建立控件,初始化的操做能够在initWithFrame:方法中作吗?
一、经过xib 或者 Storyboard 建立的控件,初始化时是不会调用initWithFrame方法,会执行initWithCoder方法,初始化完成后执行awakeFromNib方法,建议在wakeFromNib方法中初始化
二十5、经过 alloc/init 或者 alloc/initWithFrame 建立控件会不会主动加载xib?
经过 alloc/init 或者 alloc/initWithFrame 建立控件不会主动加载xib,即便xib名和控件的类名同样
二十6、KVC 的做用
一、能够修改私有变量
二、能够取值
三、能够修改属性
二十7、.如何监听 scrollView 中止滚动? - 1.设置scrollView的代理
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
二十8、定时器通常有什么做用?以及如何使用定时器
一、能够设置每隔一段时间执行一个事件
一、经过+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(nullable id)userInfo repeats:(BOOL)yesOrNo; 建立
二、能够建立一个自动执行任务的定时器
三、能够经过- (void)invalidate中止定时器
二十9、UIScrollView 没法滚动的缘由
一、userinterface = NO
二、scrollEnable = No
三、tableview的contentsize没有设置,或者设置的比较小
三10、scrollEnable和 userInteractionEnable 的区别
一、scrollenable = no时,只是不能滚动,他事件依旧可以响应
二、userInteractionEnable = no,禁止任何交互事件
三11、如何监听 UIScrollView 各类行为 -
1.设置 scrollView的delegate(代理)为控制器对象
2.控制器要遵照协议 UIScrollViewDelegate 协议
3.控制器要实现 UIScrollViewDelegate 协议里面的方法
三12、代理的注意点 -
1.scrollView的代理能够是任何类型的OC 对象
2.代理必定是weak
三十3、经过约束如何实现动画
- 在修改了约束以后,只要执行下面代码,就能作动画效果
[UIView animateWithDuration:1.0 animations:^{ [添加了约束的view的父控件 layoutIfNeeded]; }];
三十4、67.经过代码自定义cell能在ininWithFrame:方法中添加子控件吗? -
一、不能,自定义cell 是在initWithStyle:reuseIdentifier:方法添加子控件
三十5、设计框架应注意什么
1
三十6、
tableView性能优化 -
1.tableView的缓存机制.
2.在不等高Cell当中,提早计算Cell的行高.提早估一个行高.200-250
3.若是说Cell当中有圆形图片,图片不要用ImageView加载layer.corneadius裁剪去作.会形成离屏渲染. 用绘图Qurarzds裁剪,生成一张圆形的图片.
4.若是说图片的宽高,指定为小数点.会形成锯齿,形成锯齿就会致使离屏渲染 -
5.cell当中的ImageView的大小最好是跟UIImage是同样大,若是不同大 它会对UIImage作形变操做.cell当中展现都是小图.小图的大小跟ImageView 点击放大,是再去用大的ImageView加载大图.
6.作tableView的时候必定要用真机. -
7.若是是从网络加载数据,必定要放到子线程(异步加载)当中作.
8.加载完毕的数据必定作本地缓存.
9.cell当中不要动态的添加子控件.通常都在建立时,就把要出现的Cell给添加进去,暂时不要显示的,可隐藏.
10.尽可能减小Cell内部子控件的个数.
11.若是控件很是多,把不须要与用户进行交互的控件.能过异步绘制出来.生成一张图片.把图片添加到cell当中