iOS基础问答面试
<简书社区 — Timhbw>iOS基础问答面试题连载(一)-附答案:http://www.jianshu.com/p/1ebf7333808d
<简书社区 — Timhbw>iOS基础问答面试题连载(二)-附答案:http://www.jianshu.com/p/ce50261f8907
<简书社区 — Timhbw>iOS基础问答面试题连载(三)-附答案:http://www.jianshu.com/p/5fd65c20912e
以下是一些自己收集的比较基础的问题(大神可以忽略),附上答案,方便大家阅读。俗话说得好,基础不牢,地动山摇。文章末尾会提供PDF版的文档,方便大家木有网的时候也可以用移动设备观看。
1.xcode5和xcode7区别?
xcode7没有Frameworks文件夹,xcode7内部会自动帮你导入一些常见的框架.
xcode7多了LaunchScreen.xib,LaunchScreen.xib设置启动界面,而且可以确定模拟器或者真机的真实尺寸,如果没有设置,默认4s的尺寸(320,480)
xcode7没有pch文件
xcode5当中也有info.plist,只不过它的名字很长.是工程的名称.
2.pch文件原理?
把pch里面的所有内容导入到每个文件中去
3.UIApplication常见功能?
设置应用提醒数字
设置连网状态
设置状态栏
跳转网页
4.程序完整启动流程?
1.执行Main
2.执行UIApplicationMain函数.
3.创建UIApplication对象,并设置UIApplicationMain对象的代理.UIApplication的第三个参数就是UIApplication的名称,如果指定为nil,它会默认为UIApplication.UIApplication的第四个参数为UIApplication的代理.
4.开启一个主运行循环.保证应用程序不退出.
5.加载info.plist.加载配置文件.判断一下info.plist文件当中有没有Main storyboard file base name,里面有没有指定storyboard文件,如果有就去加载info.plist文件,如果没有,那么应用程序加载完毕.
5.UIWindow是什么?
UIWindow是一种特殊的UIView,通常在一个app中至少有一个UIWindow
iOS程序启动完毕后,创建的第一个视图控件就是UIWindow,接着创建控制器的view,
最后将控制器的view添加到UIWindow上,于是控制器的view就显示在屏幕上了
一个iOS程序之所以能显示到屏幕上,完全是因为它有UIWindow
6.手动创建窗口的步骤?
1.创建窗口,要有窗口显示,必须要有强引用.窗口也是控件,要想展示出来.必须得要有尺寸.
2.创建控制器
3.设置控制器为窗口的根控制器
4.显示窗口
7.makeKeyAndVisible做了哪些事情?
让窗口成为显示状态.
把根控制器的View添加到窗口上面.
把当前窗口设置成应用程序的主窗口
8.如何从从StoryBoard加载控制器?
加载指定的storyBoard
加载箭头所指向的控制器.
加载指定标识的控制器.
9.initWithNibName的加载过程?
如果没有指定名称.指定为nil,那么它就会去先加载跟它相同名称的Xib.
如果没有跟它相同名称的Xib,那么它就会再去加载跟它相同名称去点Controller的名字的Xib.- - 控制器的init方法会调用initWithNibName:方法.
10.LoadView 作用以及使用LoadView的注意点?
控制器调用loadView方法创建控制器的view.它的默认做法是:
先去判断当前控制器是不是从StoryBoard当中加载的,如果是,那么它就会从StoryBoard当中加载控制器的View.
如果不是从StoryBoard当中加载的, 那么它还会判断是不是从Xib当中创建的控制器.如果是,那么它就会从xib加载控制器的View.
如果也不是从Xib加载的控制器.那么它就会创建一个空的UIView.设为当前控制器的View.
一旦重写了loadView,表示需要自己创建控制器的View.
如果控制器的View还没有赋值,就不能调用控制器View的get方法.会造成死循环.
因为控制器View的get方法底层会调用loadView方法.注意点:
11.UIPickView是什么控件,基本用法怎样的?
UIPickView选择控件,用来供用户选择一些城市等.它的基本用法与tableView基本相似,要设置数据源,代理, 让其展示数据
12.KVC底层实现?
拿字符串与当前类的属性进行匹配.如果匹配到,就给该属性赋值.
[flagItem setValue:obj forKeyPath:key];
1.会找有没有跟key值相同名称的set方法,如果有,就会调用set方法,把obj传入
2.如果说没有set方法.那么它会去找没有相同名称,并且带有下划线的成员属性,如果有就会给该属性赋值.
3.如果也没有带有下划线的成员属性,就看有没有跟它相同名称的成员属性,如果有就会给该属性赋值.
4.如果还没有跟它相同名称的成员属性,就会调用
setValue:(id)value forUndefinedKey:5.如果没有实现setValue: forUndefinedKey: 就直接报错
13.导航控制器View的结构是怎样的?
一个专门存放栈顶控制器View的View
一个导航条,导航条的高度为44,Y值为20
14.导航push做了哪些事情?
当调用push方法时, 会把要push的控制器添加到导航控制器管理的栈中,把之前导航控制器中栈顶控制器View给移除,把当前栈顶控制器添加上去.
15.导航pop做了哪些事情?
当调用pop方法时, 会把要pop的控制器从栈里移除,把之前导航控制器中栈顶控制器View给移除,把当前栈顶控制器添加上去.
16.如何设置导航条的内容?
导航条的内容由导航控制器的栈顶控制器的NavigationItem决定.
17.导航控制器pop操作有哪些?
返回上一级
返回到根控制器
返回到指定的控制器.
18.文本框如何拦截用户输入?
给指定的文件框,设置代理 ,实现代理方法.里面包括是否允许开始编辑,是否允许结束编辑,是否允许改变字符等等.
19.如何自定义键盘?
自定义键盘,要继承系统的UITextField,设置文本框的一个属性,该属性名称为inputView.这样就可以把键盘定义成自己要想的View.
20.导航控制器的作用?
导航控制器可以轻松的完成控制器之间的切换.其操作有push,pop等.
21.自动跳转与手动型跳转区别?
自动跳转:通过控件直接拖线的方式进行跳转
手动跳转:在跳转之前要去做一些处理工作. 必须得要执行
performSegueWithIdentifier:才能跳转.
22.什么时候使用代理 ,代理的步骤?
当一个对象发生某一件事时,想要把自己的东西传给别人.或是通知别人做某事使用代理.
使用场景: 上下级之间,通常是它的上一级成为它的代理.
步骤:
1.定义协议
2.定义代理属性
3.在.m文件当中调用代理方法
4.设置代理
5.遵守协议
6.实现协议方法
23.ios当中存储方式有哪些?
XML属性列表(plist)
Preference(偏好设置)
NSKeyedArchiver,只有遵守NSCoding协议的对象才可以使用这种方式。
SQLite
Core Data
24.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当中
PDF2文件下载:http://dl.huangbowei.com
原文链接:http://www.jianshu.com/p/ce50261f8907
iOS基础问答面试的更多相关文章
- IOS基础学习-2: UIButton
IOS基础学习-2: UIButton UIButton是一个标准的UIControl控件,UIKit提供了一组控件:UISwitch开关.UIButton按钮.UISegmentedContro ...
- iOS 基础日记-修饰符
今晚随便温习了一下iOS 基础关于修饰符这块的东西,下面简单的来描述一下,其中有的也是在网络学习到的: strong与weak是由ARC新引入的对象变量属性 ARC的解释:ARC引入了新的对象的生命周 ...
- [iOS基础控件 - 5.5] 代理设计模式 (基于”APP列表"练习)
A.概述 在"[iOS基础控件 - 4.4] APP列表 进一步封装,初见MVC模式”上进一步改进,给“下载”按钮加上效果.功能 1.按钮点击后,显示为“已下载”,并且不 ...
- [置顶] IOS 基础入门教程
IOS 基础入门教程 教程列表: IOS 简介 IOS环境搭建 Objective C 基础知识 创建第一款iPhone应用程序 IOS操作(action)和输出口(Outlet) iOS - 委托( ...
- iOS 基础:Frames、Bounds 和 CGGeometry
https://segmentfault.com/a/1190000004695617 原文:<iOS Fundamentals: Frames, Bounds, and CGGeometry& ...
- iOS 基础入门--Bull' Eye 小游戏
说明 Bull's Eye小游戏是http://www.raywenderlich.com/store/ios-apprentice里非常酷的入门demo 跟着该教程一步步做下来便有了 ...
- Redis基础知识点面试手册
Redis基础知识点面试手册 基础 概述 数据类型 STRING LIST SET HASH ZSET(SORTEDSET) 数据结构 字典 跳跃表 使用场景 会话缓存 缓存 计数器 查找表 消息队列 ...
- iOS 基础函数解析 - Foundation Functions Reference
iOS 基础函数解析 - Foundation Functions Reference 太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名- ...
- 新手必看】Highcharts的100个基础问答
新手必看]Highcharts的100个基础问答 2014-12-2 10:59| 发布者: Mr.Zhang| 查看: 2749| 评论: 3|来自: Highcharts中文论坛 摘要: 1. ...
随机推荐
- Mir2源码详解之服务端-选择(角色)网关(SelGate)
其实,SelGate也就是 LoginGate,其源码实现完全相同.不必怀疑,市面上的都是这么做~!这里单独写这篇文章,就是为了说明这点!
- eclipse自动补全
最简单的修改方式是:Windows——>Preferences——>Java-->Editor-->Content Asist,在Auto activation trigger ...
- 理解 JavaScript Scoping & Hoisting(二)
理解 JavaScript Scoping & Hoisting(二) 转自:http://www.jb51.net/article/75090.htm 这篇文章主要介绍了理解 JavaScr ...
- sublime几个有用的快捷键
几个有用的快捷键:Ctrl+D:选择多个相同字符串进行修改.选中字符串,按住Ctrl+D,继续选中下一个.Ctrl+Shift+L:将选中的内容切割成多行,然后每一行可以同时编辑Ctrl+J:将已选择 ...
- ERROR 1045 (28000): Access denied for user root@localhost (using password:
错误描述: Mysql中添加用户之后可能出现登录时提示ERROR 1045 (28000): Access denied for user的错误.删除user.user中值为NULL的,或更新NULL ...
- ajax使用。
<script> function createAjax(){ var request=false; //window对象中有XMLHttpRequest存在就是非IE,包括(IE7,IE ...
- 用delphiXE7 dbExpress Framework提供的功能获取数据表信息
uses + Data.DBXMetaDataNames procedure TMainForm.Button2Click(Sender: TObject);var Cmd: TDBXComman ...
- .Net并行编程
1.什么是线程?线程和进程的区别是什么? 线程是程序执行的最小单元. 区别: 进程是操作系统进行资源处理和分配的最小单位,而一个进程可以包含多个线程,并共享进程的资源. 2.什么是多线程?为什么设计多 ...
- C++基本数据类型解惑
记得刚学C语言的时候,对那些double,float,long,unsigned int各种混乱,基本是随便用,对数据类型没有一个整体的框架.最近学习<<C++ primer plus&g ...
- STM32F4_RCC系统时钟配置及描述
Ⅰ.概述 对于系统时钟应该都知道它的作用,就是驱动整个芯片工作的心脏,如果没有了它,就等于人没有了心跳. 对于使用开发板学习的朋友来说,RCC系统时钟这一块知识估计没怎么去配置过,原因在于开发板提供的 ...