- 又到了一年之中找工作的高峰期了,很多iOS开发者陆陆续续开始重新奔上找工作的路途上,去年这个时候大量人员涌入iOS开发这条路,导致iOS市场饱和,很多公司也对求职者提高了标准,不再是你会个简单的表视图就能找到一个不错的工作的时代了,公司开始注重基础知识,使得很多求职者被拒之门外,不过机会都是留给有准备的人的,只要你准备充分,上帝还是愿意为你打开一扇窗!
下面是我收集整理的一些iOS基础问题,附上答案,方便大家阅读。俗话说得好,基础不牢,地动山摇。希望能对你有所帮助。
1.简单的描述下类扩展和分类的区别?(说2点)
类扩展没有名字,分类有名字
类扩展可以为某个类增加额外的属性、成员变量、方法声明;分类只能扩充方法,不能扩充成员变量,如果在分类中声明了一个属性,分类只会生成这个属性的get\set方法声明
2.简要的说明UIView的frame和bounds的区别
frame表示的是该控件在父控件中的位置大小,是以父控件的左上角为坐标原点.
bounds表示的是控件矩本身的位置大小,是以自己的左上角为坐标原点.
3.什么是控制器
- 凡是继承自UIViewController的对象都是控制器.
4.简单的描述控制器的作用
- 负责处理软件界面的各种事件,并负责软件界面的创建和销毁.
5.简单的描述下storyboard的作用
- 用来描述描述软件界面的
6.简述程序的启动原理
- 程序一启动,就会加载Main.storyboard文件;会创建箭头所指的控制器,并显示控制器所管理的软件界面
7.IBOutLet有什么作用
- 被IBOutlet修饰的属性能拖线到storyboard中,而且只能修饰属性.
8.IBAction有什么作用
- 被IBAction修饰的方法能拖线到storyboard中,只能修饰方法返回值类型
9.IBAction和IBOutLet前缀IB是什么意思
- IB全称:Interface Builder,从Xcode4开始,Interface Builder已经整合到Xcode中
10.简单描述父子控件
- 每个控件都是个容器,能容纳其他控件;内部小控件是大控件的子控件;大控件是内部小控件的父控件
11. 解释下引用资源的时候每个选项的含义
- copy:勾选copy,会把资源拷贝一份到项目的文件夹中(建议勾选,因为这样修改项目中的资源不会影响源资源)
- Added folder:如果勾选Create groups,只会会创建一个虚拟的文件夹,程序打包后,安装包中不存在这个文件夹;如果勾选Create folder references,真的创建一个文件夹,程序打包后,安装包中真的有这个文件夹.
- Add to targets:要不要把资源打包到软件安装包中去.一定要勾选,不勾选到时候程序打包后,安装包中没有这个资源.
12.UILabel如何设置自动换行
- 设置numberOflines 为0.
13.Character Wrap和Word Wrap的区别
- Character Wrap 字符包裹;
- Word Wrap 单词包裹<保证单词的完整性>
14.contentMode的作用
- 内容模式: 一般用来控制图片如何显示
15.initWithImage:的作用?
- 根据传入的图片对象创建UIImageView对象;并且UIImageView的尺寸默认等于图片的尺寸
16.如何修改一个控件的frame属性?
- 1.直接使用CGRectMake函数
- 2.利用临时结构体变量
- 3.直接运用结构体赋值
17.如何抽方法?
- 先把相同的代码抽到方法中
- 把要变化的东西换成变量,然后编译,把报错的设置为方法的参数
18.通过imageNamed:这个方法加载图片有什么特点?
- 有缓存
UIImage *image =[UIImage imageNamed:@"图片名"]
- 使用场合:图片比较小、使用频率比较高
- 建议:把需要缓存的图片放到Images.xcassets
19.开发如何选择UILabel,UIImageView,UIButton
- 能用UILabel,UIImageView的尽量用UILabel,UIImageView;需要和用户交互用UIButton
20.什么是自定义控件
- 继承自系统的控件写一个自己的控件,目的是封装控件内部的细节
21.通过代码如何自定义控件? 并且简单的描述下每一个步骤的理由?
- 新建一个继承UIView的类,(所谓自定义控件就是继承系统自带的控件写一个自己的控件)
- 在initWithFrame方法中添加子控件(保证别人在外面不管是通过init还是initWithFrame创建都能够添加子控件,因为init方法内部会调用initWithFrame
- 在layoutSubViews方法中设置子控件的frame(因为在InitWithFrame方法中当前控件尺寸可能没值,所以计算不了子控件的位置和尺寸,而在layoutSubViews方法,能够拿到当前控件的尺寸)
- 提供一个模型属性,重写模型属性的set方法(保证在别人在设置数据的那一刻就可以拿到数据设置到对应的子控件上)
22.什么是模型
- 概念:专门用来存放数据的对象
- 特点:一般继承NSObject,在.h文件中声明一些用来存放数据的属性
23.通过XIB如何自定义控件? 并且简单的描述下每一个步骤的理由?
- 1.新建一个继承UIView的类,(所谓自定义控件就是继承系统自带的控件写一个自己的控件)
- 2.新建一个xib文件(xib的文件名最好和类名一样)
- 3.修改最外面那个控件的class为控件类名(只有修改类名,当时候从xib中出来的才是我这种类型的控件)
- 4.提供一个模型属性,重写模型属性的set方法(保证在别人在设置数据的那一刻就可以拿到数据设置到对应的子控件上)
24.instancetype和id的区别
- 都可以代表任意类型
- instancetype只能作为返回值
- id类型可以作为返回值,也可以作为参数,也可以定义变量
- instancetype会类型检测,id不会进行类型检测
25. @property的使用策略
- assign:’基本数据类型’、’枚举‘、’结构体‘等非OC对象
- weak:OC对象类型(比如NSArray、NSDate、NSNumber、模型类)
- strong:OC对象类型(比如NSArray、NSDate、NSNumber、模型类)
- 一个对象只要有强指针引用,就不会被销毁
26.懒加载的好处?
- 用到时再加载,只会加载一次
27.如果是通过xib或者storyboard创建控件,初始化的操作可以在initWithFrame:方法中做吗?
- 如果是通过xib或者storyboard创建控件,初始化时是不会调用initWithFrame,会调用initWithCoder.初始化完毕会调用awakeFromNib方法,建议在awakeFromNib中做初始化
28.通过alloc/init或者alloc/initWithFrame创建控件会不会主动加载xib?
- 通过alloc/init或者alloc/initWithFrame创建控件不会主动加载xib,即使xib的名称和控件的类名一样
29.用一个属性引用UI控件的时候为什么可以用weak?
- 因为UI控件添加到父控件中以后,会有强指针指向这个对象,就应经可以保证这个对象不会被销毁.在搞一个属性引用这个对象,用弱引用就可以.