day02

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)类方法和实例方法的区别(调用)

类方法

  1. 类方法是属于类对象的
  2. 类方法只能通过类对象调用
  3. 类方法中的self是类对象
  4. 类方法可以调用其他的类方法
  5. 类方法中不能访问成员变量
  6. 类方法中不能直接调用对象方法

实例方法:

  1. 实例方法是属于实例对象的
  2. 实例方法只能通过实例对象调用
  3. 实例方法中的self是实例对象
  4. 实例方法中可以访问成员变量
  5. 实例方法中直接调用实例方法
  6. 实例方法中也可以调用类方法(通过类名)

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相对比较平静,但是还是有一些变化,那么我们就瞧一瞧!

  1. 值得兴奋的一点是 Xcode7 免证书真机调试。但是不要兴奋太早,只是简单的调试,如果我们做推送、地图功能是还是得有证书。其调试方法有现有教程:http://www.cnblogs.com/wahy/p/5004623.html

  2. UIAlertView过期,用UIAlertController可以完全替代,而且效果很好的.

  3. tableView刷新有时比较坑,如果全部刷新不好使,我们可以使用局部刷新的方法

  4. URL scheme
    当我们要用到分享或者调到其他平台授权的功能时,在iOS8中可以比较随意,但是在iOS9中我们需要将要外部调用的URL scheme列为白名单,才可以完成跳转

  5. 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中得到广泛应用.

你可能感兴趣的:(day02)