1) iOS 中KVC、KVO总结及区别
1、KVC,即是指 NSKeyValueCoding,一个非正式的Protocol,提供一种机制来间接访问对象的属性。而不是通过调用Setter、Getter方法访问。KVO 就是基于 KVC 实现的关键技术之一。
KVC的常用方法:
- (id)valueForKey:(NSString *)key; -(void)setValue:(id)value forKey:(NSString *)key;
valueForKey的方法根据key的值读取对象的属性,setValue:forKey:是根据key的值来写对象的属性。
注意:
(1). key的值必须正确,如果拼写错误,会出现异常
(2). 当key的值是没有定义的,valueForUndefinedKey:这个方法会被调用,如果你自己写了这个方法,key的值出错就会调用到这里来
(3). 因为类key反复嵌套,所以有个keyPath的概念,keyPath就是用.号来把一个一个key链接起来,这样就可以根据这个路径访问下去
(4). NSArray/NSSet等都支持KVC
2、KVO的是KeyValue Observe的缩写,中文是键值观察。这是一个典型的观察者模式,观察者在键值改变时会得到通知。iOS中有个Notification的机制,也可以获得通知,但这个机制需要有个Center,相比之下KVO更加简洁而直接
KVO的使用也很简单,就是简单的3步。
1.注册需要观察的对象的属性addObserver:forKeyPath:options:context:
2.实现observeValueForKeyPath:ofObject:change:context:方法,这个方法当观察的属性变化时会自动调用
3.取消注册观察removeObserver:forKeyPath:context:
3.KVC和KVO的区别和联系:
KVC的主要作用:给模型中的属性赋值和取值
KVO的主要作用:监听模型中属性值的改变
KVC是路径访问的规范,KVO则是观察某个变量的变化过程
KVC/KVO类似于代理,通知,都是一种通讯方法。
2)类方法和实例方法的区别(调用)
类方法
- 类方法是属于类对象的
- 类方法只能通过类对象调用
- 类方法中的self是类对象
- 类方法可以调用其他的类方法
- 类方法中不能访问成员变量
- 类方法中不能直接调用对象方法
实例方法:
- 实例方法是属于实例对象的
- 实例方法只能通过实例对象调用
- 实例方法中的self是实例对象
- 实例方法中可以访问成员变量
- 实例方法中直接调用实例方法
- 实例方法中也可以调用类方法(通过类名)
3) iOS7,iOS8和iOS9的区别
iOS7.0
1.iOS 7是iOS面世以来在用户界面上做出改变最大的一个操作系统。iOS 7抛弃了以往的拟物化设计,而采用了扁平化设计。
苹果在重新思考 iOS 的设计时,更希望围绕 iOS 中深受人们喜爱的元素,打造一种更加简单实用而又妙趣横生的用户体验。最终,苹果优化了 iOS 的工作方式,并以此为基础重新设计了 iOS 的外观。之所以这样做,是因为能够服务于体验的设计才是出色的设计。
2.控制中心
控制中心为你建立起快速通路,便于你使用那些随时急需的控制选项和 app。只需从任意屏幕 (包括锁定屏幕) 向上轻扫,即可切换到飞行模式,打开或关闭无线局域网,调整屏幕亮度等等,你甚至还可以使用全新的手电筒进行照明。如此众多的操控,任你一挥而就。
3.增强的通知中心
通知中心可让你随时掌握新邮件、未接来电、待办事项和更多信息。一个名为 "今天" 的新功能可为你总结今日的动态信息,十分便捷。扫一眼你的iPhone,你就知道今天是否是某人的生日,你是否需要雨伞,或交通状况会否影响你的上下班出行,你甚至还能收到关于明天的提醒。你可以从任何屏幕 (包括锁定屏幕) 访问通知中心。只需向下轻扫,即可迅速掌握各类动态信息。
需要注意的是,之所以说是一个新功能,是因为iOS 7的通知中心较以往而言,变成了三栏——今天,全部,未读通知。
4.更加智能的多任务处理
多任务处理始终是在 App 之间切换的捷径。因此,它变得更加智能。因为 iOS 7 会了解你喜欢何时使用 App,并在你启动 App 之前更新你的内容。因此,如果你经常在上午 9 点查看最喜爱的社交 App,那么你所关注的相关内容届时将准备就绪,待你随时取用。这就是 iOS 7 的多任务处理功能,你还没做,它就已经为你想到了。
iOS 中的多任务处理变成卡片式,只需向上轻扫便可以关闭程序。
5.更强大的相机
iOS 7 的相机功能将你所有的拍摄模式置于显要位置,包括照片、视频、全景模式和新增的 Square 模式。轻扫一下,你就能以你喜欢的方式拍摄你想拍的画面,瞬间即成。而全新滤镜可让你更好地享受每张照片带来的乐趣。你可为照片增添复古味道,提升对比度,或感受黑白魅力,任你尽情挥洒艺术创意。
6.智能相册
现有更快速、更轻松、更愉悦的方式,让你在记忆的长廊中自如穿行。特别介绍精选、时刻与年度,它们能根据时间和地点智能地分组管理你的照片和视频。轻点年度,你所有的照片即会充满屏幕。而地点将你拍摄照片的场所记录下来。这样,你就能快速找到任何时间、任何地点拍摄的内容。
7.AirDrop文件共享
通过文本讯息或电子邮件发送照片或文档,是没问题的。但如果某人就在你旁边,文字讯息或电子邮件会突然让人感觉大费周章。进入适用于iOS 的 AirDrop,它能让你通过共享按钮,快速、轻松地共享照片、视频、通讯录,以及任何 App 中的一切。只需轻点共享,然后选择你的共享对象。AirDrop 会使用无线网络和蓝牙搞定其余的事情,不仅无需设置,而且传输经过加密,可严格保障共享内容的安全。
8.改进的Safari
iOS 7 中的 Safari令浏览更强大、更出色、更美观。按钮和工具栏,如综合智能搜索栏,会隐藏起来,除非你通过滚动操作将其调出。因此,你会在屏幕上看到比以往更多的内容。只要轻扫一下,你就能向前或向后翻动页面。一切设计,都为令你的浏览快速顺畅,全无障碍。
综合智能搜索栏、全新标签视图、共享的链接和阅读列表让你的Safari更加强大。
9.iCloud 钥匙串
你在网上做许多事情都需要密码。但iCloud可以为你记住你的帐户名称、密码和信用卡号码。无论你何时需要登入网站或在线购买,Safari 都能自动输入这些信息。它可在所有经过你许可的 iOS 7 设备和运行 OS XMavericks 的 Mac 电脑上使用。而且 256-bit AES 加密令它极为安全。
10.正式版Siri
iOS 7 中的 Siri拥有新外观、新声音和新功能。它的界面经过重新设计,以淡入视图浮现于任意屏幕画面的最上层。Siri 回答问题的速度更快,还能查询更多信息源,如维基百科。它可以承担更多任务,如回电话、播放语音邮件、调节屏幕亮度,以及更多。
11.App Store新功能
我的附近的热门 App 是 iOS 7 推出的 App Store 新功能,能够显示与你当前位置相关的一系列热门 App。另外,如果你觉得 App Store 的精彩内容太多而难以取舍,欲购清单可给你些思考的时间。你可以随时将 App 保存在欲购清单里,稍后做好决定再来购买。iOS 7 还能让你的 App 自动保持更新,再不需要你费心。自动更新的另一个好处是:你再也无需关注那些提示 App 更新的红色小徽章了。
iOS8.0
1.size classes的推出
size classes的产生对于屏幕的适配提供了便利,没必要获取屏幕的尺寸来进行操作了,将长宽尺寸按照设备类型和方向归类为 regular 和 compact两类,通过为不同的设备定义尺寸分类,用来定义同类型的操作特性,美中不足的是只能相对于父控件来适配。
2.Cloud Kit
其作用就是将数据原封不动的使用 Cloud Kit 向云端获取数据和存储数据,自我感觉作用像 “百度云管家”
在我们使用位置服务和推送消息时必须经过用户授权
3.新增 Photos.framework 框架
这个框架的主要作用就是和我们苹果自带的 photo 应用交互,它对于 Assets Library (照片和视频的选取)的主要优势在于能够和iCloud照片交互。还能监视其他应用对于照片的改变.
第三方软件也可以通过 touchID验证(支付宝)。
4.HeatKit框架的推出
我们绑定健康应用后就可以查看很多的健康信息包括步数、跑步距离等等
5.Spotlight
当我们要查找一个联系人或者软件,Spotlight就可以快键方便的查出,还能帮你在互联网和维基百科提供匹配的信息
iOS9.0
经过iOS7和iOS8两次重量级的变革和更新,iOS9 SDK相对比较平静,但是还是有一些变化,那么我们就瞧一瞧!
值得兴奋的一点是 Xcode7 免证书真机调试。但是不要兴奋太早,只是简单的调试,如果我们做推送、地图功能是还是得有证书。其调试方法有现有教程:http://www.cnblogs.com/wahy/p/5004623.html
UIAlertView过期,用UIAlertController可以完全替代,而且效果很好的.
tableView刷新有时比较坑,如果全部刷新不好使,我们可以使用局部刷新的方法
URL scheme
当我们要用到分享或者调到其他平台授权的功能时,在iOS8中可以比较随意,但是在iOS9中我们需要将要外部调用的URL scheme列为白名单,才可以完成跳转iOS8 自动开启多点触控,但是iOS9默认不开启
在viewDidLoad里面添加:self.view.multipleTouchEnabled = YES;
6.iOS9增加了语言后面的地区代码, 中国 zh-Hanz–>zh-hanz-CN
7.Xcode7打包不了老项目,报错bitcode,解决方法:build setting中关闭bitcode,设置 enable bitcode 为NO
8.IOS9中部分字体可能间距会变大,label中显示不全的问题。
4) 继承(Inherit)和类别(category)、扩展(extension)的区别
1.分类
iOS中,当原有类的方法不够用时,这时候分类就出现了。category是在现有类的基础上添加新的方法,利用objective-c 的动态运行时分配机制,可以为现有类添加新方法。可以在分类中添加方法和成员变量,但是添加的成员变量不会自动生成setter和getter方法,需要在实现部分给出实现。
.h部分:
.m部分:
2.扩展
iOS中的extension就是匿名的分类,只有头文件没有实现文件。只能扩展方法,不能添加成员变量。扩展的方法只能在原类中实现。例如你扩展NSString,那么你只能在NSString的.m实现(这是不可能的),所以尽量少用扩展。用分类就可以了。
如下图扩展标志:
3.继承
学习objective-c语言没有人是不知道继承,继承在面向对象语言是非常重要的。在iOS中继承是单继承,既只能有一个父类。在继承中,子类可以使用父类的方法和变量,当子类想对本类或者父类的变量进行初始化,那么需要重写init()方法 。父类也可以访问子类的方法和成员变量。
如下图MainViewController 继承自UIViewController。
5) 谈谈你对MVC的理解?为什么要用MVC?在Cocoa中MVC是怎么实现的?你还熟悉其他的OC设计模式或别的设计模式吗?
MVC就是Model-View-Controller的缩写,M指的是业务模型,V指的是用户页面,C指的是控制器。MVC是架构模式,是讲M和V的代码分离,从而使同那个一个程序可以使用不同的表现形式。
单例,代理,观察者,工厂模式等
-
单例模式:单例模式的意思就是只有一个实例。单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。
单例模式的要点:显然单例模式的要点有三个;一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。
单例模式的优点:
实例控制:Singleton 会阻止其他对象实例化其自己的 Singleton 对象的副本,从而确保所有对象都访问唯一实例。
灵活性:因为类控制了实例化过程,所以类可以更加灵活修改实例化过程
- 代理模式:代理模式给某一个对象提供一个代理对象,并由代理对象控制对源对象的引用.比如一个工厂生产了产品,并不想直接卖给用户,而是搞了很多代理商,用户可以直接找代理商买东西,代理商从工厂进货.常见的如QQ的自动回复就属于代理拦截,代理模式在iphone中得到广泛应用.