iOS. 面试题(一)

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的代理

  • 2.代理对象遵照协议
  • 3.实现协议里面
- (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当中

相关文章
相关标签/搜索