iOS面试经历(个人)
1.OC的runtime运行机制
1> runtime,运行时机制,它是一套C语言库
2> 实际上我们编写的所有OC代码,最终都是转成了runtime库的东西,比如类转成了runtime库里面的结构体等数据类型,方法转成了runtime库里面的C语言函数,平时调方法都是转成了objc_msgSend函数(所以说OC有个消息发送机制,消息的发送是在runtime时执行的)
3> 可以说runtime是OC的底层实现,是OC的幕后执行者
4> 有了runtime库,能做什么事情呢?runtime库里面包含了跟类、成员变量、方法相关的API,比如获取类里面的所有成员变量,为类动态添加成员变量,动态改变类的方法实现,为类动态添加新的方法等
2.为什么NSString只能使用copy属性,不能使用retain?NSString也是对象哦!
1、如果使用retain,只是引用计数加1,并没有生成新的对象,所以效率好;
2、但是使用copy安全,因为NSString是NSMutableString的基类,如果将NSMutableString以retain的形式赋值给NSString后,后续修改NSMutableString会导致NSString内容的变化,这通常不是我们希望的,所以使用copy。
3.frame、bounds和center的使用场景
一般来说,bounds属性比较少用,通常使用frame来设置视图的大小和位置,使用center来改变(移动)视图的位置(也可用frame来改变位置)。另外,对视图进行旋转、缩放也都是相对于center进行操作的。
frame和bounds是UIView中的两个属性(property)。
frame指的是:该view在父view坐标系统中的位置和大小。(参照点是父亲的坐标系统)
bounds指的是:该view在本身坐标系统中 的位置和大小。(参照点是本身坐标系统)
-(CGRect)frame{
return CGRectMake(self.frame.origin.x,self.frame.origin.y,self.frame.size.width,self.frame.size.height);
}
-(CGRect)bounds{
return CGRectMake(0,0,self.frame.size.width,self.frame.size.height);
}
注意:很明显,bounds的原点是(0,0)点(就是view本身的坐标系统,默认永远都是0,0点,除非调用了setbounds函数),而frame的原点却是任意的(相对于父视图中的坐标位置)。
4.MVC的模式?
Controller(控制中心,大管家)
Model (模型,封装数据) view(视图,显示数据)
控制器可以直接和model和view交互,初始化model,把model传递给view显示,view上面显示什么取决于model。mvc模式实现了model和view的代码分离,各自负责各自的业务逻辑。
5.代理模式?
(1)什么是代理?委托代理(degegate),顾名思义,把某个对象要做的事情委托给别的对象去做。那么别的对象就是这个对象的代理,代替它来打理要做的事。
(2)代理的使用场景?
a.对象A内部发生事情,想通知对象B;
b.对象B想监听对象A内部发生了什么事情;
c.对象A想在自己方法中调用对象B的某个对象;
d.对象A想传数据给对象B。
(3)代理的目的?
1> 两个对象之间传递数据和消息
2> 解耦,拆分业务逻辑
6.通知模式?
(1)什么是通知?
每一个应用APP都有一个通知中心实例,负责协助不同对象之间的消息通信
任何一个对象都可以向通知中心发布通知,描述自己在做什么。
(2)代理和通知的选择?
共同点:利用通知和代理都能完成对象之间的通信,都可以传递数据和消息。
不同点:
代理:一对一关系
通知:多对多关系
(3)只能使用delegate的情况不能使用NSNotification的情况?需要返回值的情况
7. What are KVO and KVC?
1> KVC是键值编码,可以通过一个字符串的key(属性名)修改对象的属性值
方法有valueForKey:和setValue:forKey:,支持键路径keypath
2> KVO是键值监听,可以监听一个对象属性值的改变
底层实现问题:KVO内部实现原理?
1> KVO是基于runtime机制实现的
2> 当某个类的对象第一次被观察时, 系统就会在运行期动态地创建该类的一个派生类,在这个派生类中重写基类中任何被观察属性的 setter 方法。
派生类在被重写的 setter 方法实现真正的通知机制(Personà NSKVONotifying_Person)
8.单例模式?
(1)什么是单例?What is Singleton?
单例:保证程序运行过程中,永远只有一个对象实例
目的是:全局共享一份资源、节省不必要的内存开销
9.IBAction和IBOutlet的区别?
IBAction原名是Interface Builder,用来操作建立关系,本质就是一个void,
只有返回值声明为IBAction方法,才能跟storyboard控件进行连线。
IBOutlet用来和界面上元素建立关系,用来获得修改界面控件属性.
10.在iOS开发中, .h & .m的区别?
.h 是程序接口,对外提供方法声明
.m 是程序的实现,负责方法的具体实现
11. 代理delegate、NSNotification、KVC、KVO的区别?
Delegate:代理或者委托实质上是一种设计模式中的代理模式,是对象之间传递信息的一种方式,这种模式用于一个对象“代表”另外一个对象和程序中其他的对象进行交互。这是一种一对一的关系,delegate的接收者可以向这个对象返回消息。简单的说,把一个类自己需要做的一部分事情,让另一个类(也可以就是自己本身)来完成。
NSNotification:通知中心实质是设计模式中的观察者模式,是一种一对多的关系,消息发送者只负责发送消息,不能接收消息。
KVC: KVC是KeyValueCoding的简称,它是一种可以直接通过字符串的名字(key)来访问类属性的机制。而不是通过调用Setter、Getter方法访问。关键方法定义在:NSKeyValueCodingprotocol。
KVC支持类对象和内建基本数据类型。
获取值
valueForKey:,传入NSString属性的名字。
valueForKeyPath:,传入NSString属性的路径,xx.xx形式。
valueForUndefinedKey它的默认实现是抛出异常,可以重写这个函数做错误处理。
修改值
setValue:forKey:
setValue:forKeyPath:
setValue:forUndefinedKey:
setNilValueForKey:当对非类对象属性设置nil时,调用,默认抛出异常。
一对多关系成员的情况
mutableArrayValueForKey:有序一对多关系成员 NSArray
mutableSetValueForKey:无序一对多关系成员 NSSet
KVO: KVO,即:Key-Value Observing,它提供一种机制,当指定的对象的属性被修改后,则对象就会接受到通知。简单的说就是每次指定的被观察的对象的属性被修改后,KVO就会自动通知相应的观察者了。
使用方法
1. 注册,指定被观察者的属性,
2. 实现回调方法
3. 移除观察
12 以+scheduledTimerWithTimeInterval的方式触发的timer,在滑动页面上的列表时,timer会暂定回调,为什么?如何解决?
13 protocol和delegate有什么类似的区别?如何实现一个delegate?
14 简述一下,app在ios前,后台运行时有什么不同?
15 如何使开发出的app能比较省电?
16 假设在空指针上调用方法,会发生什么?
17 在oc中,如何实现线程同步?
18 ios支不支持多任务?ios9以下不支持
19 如何将iosapp进行多语言发布?
20 app的状态有多少种?
iOS面试经历(个人)的更多相关文章
- 2015腾讯暑期实习生 Web前端开发 面试经历
[2015腾讯暑期实习生 Web前端开发 面试经历] 好吧,首先声明,我被刷了,应该是跪在二面 微信查到的面试状态一直呈现复试中 .. 整整四天了.. 看来是没希望了 不过也是一次经历,记录一下还是可 ...
- IOS面试攻略
IOS面试攻略(1.0) 2013-10-13 20:58:09| 分类: IOS面试 | 标签:ios知识点总汇 ios面试 |举报|字号 订阅 来自:伊甸网 @ 看到这个关键字,我 ...
- IOS面试问题总结
IOS面试问题总结 分类: IOS开发2013-11-20 17:26 10458人阅读 评论(1) 收藏 举报 目录(?)[+] 通过网络搜寻和自己总结经历找了一些IOS面试经常被问道的问题 ...
- iOS面试3
转:http://studentdeng.github.io/blog/2014/02/11/baidu-interview/ 百度面试 FEB 11TH, 2014 | COMMENTS 百度移动云 ...
- Android面试经历2018
本人14年7月份出来参加工作,至今工作将近4年的时间了,坐标是深圳.由于在目前的公司,感觉没什么成长,就想换一个公司.楼主已经在从实习到现在,已经换了三家公司了,所以这次出来的目标的100人以上,B轮 ...
- ios面试技术要点
iOS面试 技术总结点(可参考):多线程 运行时 runloop app框架 几种动画编程 jsonmodel原理 sdwebimage原理 masonry怎么应用及原理 应用框架有哪些 说一下Fac ...
- iOS 面试基础题目
转载: iOS 面试基础题目 题目来自博客:面试百度的记录,有些问题我能回答一下,不能回答的或有更好的回答我放个相关链接供参考. 1面 Objective C runtime library:Obje ...
- [原创]大连sap vt 实习生面试经历
从决定参加这次面试开始,求职生涯就算是开始了,虽然失败了,但也是亲身体会到了面试的感觉,这次经历也作为第一篇博客. 大连sap的职能是sap的全球技术支持中心和解决方案提供中心.VT项目提供的岗位是技 ...
- iOS面试贴士
iOS面试小贴士 ———————————————回答好下面的足够了------------------------------------- 多线程.特别是NSOperation 和 GCD 的内部原 ...
随机推荐
- 第113题:路径总和II
一. 问题描述 给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径. 说明: 叶子节点是指没有子节点的节点. 示例: 给定如下二叉树,以及目标和 sum = 22, 5 ...
- python中的lambda()函数
语句:print map(lambda x:x ** 2,[1,2,3,4,5]) 其中lambda()函数在Python文档,文档中解释如下: lambda An anonymous inline ...
- LOJ 2452 对称 Antisymmetry——用hash求回文串数
概念 用hash求最长回文串/回文串数 首先,易知,回文串具有单调性. 如果字符串 $s[l...r]$ 为回文串串,那么 $s[x...y]$($l < x, y < r$ 且 $|l- ...
- Java的浅克隆与深克隆
前言 克隆,即复制一个对象,该对象的属性与被复制的对象一致,如果不使用Object类中的clone方法实现克隆,可以自己new出一个对象,并对相应的属性进行数据,这样也能实现克隆的目的. 但当对象属性 ...
- HttpURLConnection getInputStream 400异常的解决
判断getResponseCode,当返回不是HttpURLConnection.HTTP_OK, HttpURLConnection.HTTP_CREATED, HttpURLConnection. ...
- 浅谈CLOSE_WAIT
浅谈CLOSE_WAIT 发表于2016-01-19 TCP 有很多连接状态,每一个都够聊十块钱儿的,比如我们以前讨论过 TIME_WAIT 和 FIN_WAIT1,最近时不时听人提起 CLOSE_W ...
- 容器网络启用RDMA高速通讯-Freeflow
容器网络启用RDMA高速通讯-Freeflow 容器网络启用RDMA高速通讯-Freeflow 本文编译自: Freeflow,https://github.com/openthings/Freefl ...
- AdvanceEast源码理解
目录 文章思路 源码理解 一. 标签点形式 按顺序排列四个点,逆时针旋转,且第一个点为左上角点(刚开始选择最左边的点, 二. 标签切边 三. loss计算 四. NMS 最后说明 文章思路 大神的gi ...
- [HNOI2011]括号修复 / [JSOI2011]括号序列
传送门 Solution 一道题花费了两天的时间-- 在大佬@PinkRabbit的帮助下,终于AC了,感动-- 首先,我们考虑一个括号序列被修改成合法序列需要的次数: 我们需要修改的其实是形如... ...
- spring cloud 常见面试题 来理解微服
为什么要谈 这些理论知识呢 理论知识 = 面试时候的谈资 !!! 你只有 进去公司 才有资格 去做一个码农 ok 话不多说 经历如此漫长的互联网发展 以本人的拙见 软件开发 粗略的 分为 ...