iOS开发知识点总结(七)

1.如何设计一个缓存类

(1)设计一个CacheItem类,用来请求一个Web连接,它的一个实例表示一个缓存项。这个CacheItem类,需要一个URL创建一个NSURLConnection,去请求Web资源。使用CacheItem类主要用来请求Web资源。

(2)在NSURLConnection开始请求之前,调用CachedDownloadManager类,来搜索和管理本地的缓存文件。将缓存文件的情况保存到一个字典类中。

(3)如果这个文件已经被下载,而且没有过期,则从本地获取文件的数据。如果文件已经过期,则重新下载。我们通过download:URLMustExpireInSeconds:updateExpiryDateIfInCache方法来实现

2.iOS的加密方式以及优劣

(1)MD5加密是最常用的加密方法之一 ,是从一段字符串中通过相应特征生成一段32位的数字字母混合码。MD5主要特点是不可逆。

(2)在MIME格式的电子邮箱中,base64可以用来将binary的字节序列编码成ASCII字符序列构成的文本。使用时,在传输编码方式中指定base64。使用的字符包括大小写字母各26个,加上10个数字,加号“+”,斜杠“/”,一共64个字符,等号“=”用来作为后缀用途。base64编码后的数据比原始数据略长,为原来的3/4

(3)RSA非对称加密算法,非对称加密算法需要两个密钥非对称密码体制的特点:算法强度福大,安全性依赖于算法与密钥,但是由于其算法复杂,而使得加密解密速度没有对称加密解密的速度快 ,对称密码体制中只有一种密钥,并且是非公开的。

3.KVO与KVC之间的关系

KVC与KVO是Objective-C的关键概念。KVC,即是指NSKeyValueCoding,一个非正式的Protocol,提供一种机制来间接访问对象的属性。KVO就是基于KVC实现的关键技术之一。从最基础的层次上看,KVC有两种方法:一个是设置Key的值,另一个是获取Key的值。比如:[p valueForKeyPath:@"spouse.name"];相当于[[p valueForKey:@"spouse"] valueForKey:@"name"];

KVO(Key-Value Observing)建立在KVC之上,它能够观察一个对象的KVC keyPath值的变化。举个例子,用代码观察一个person对象的address变化,以下是实现的三个方法:

(1)watchPersonForChangeOfAddress:实现观察

(2)observeValueForKeyPath:ofObject:change:context:在被观察的keyPath的值变化时调用。

(3)dealloc停止观察

它通过keyPath观察对象的值,当值发生变化的时候会收到通知。

4.数据持久化机制

(1)属性列表

属性列表文件是一种XML文件,Foundation框架中的数组和字典等都可以与属性列表文件相互转换。

①NSArray类常用于读写属性列表文件的方法:

+ arrayWithContentsOfFile;

- writeWithContentsOfFile;

- writeToFile:atomically;

②NSDictionary类常用读写属性列表文件的方法:

+ dictionaryWithContentsOfFile;

- initWithContentsOfFile;

- writeToFile:atomically;

③也可以通过代码直接创建plist文件。

(2)对象归档

对象归档是将对象归档以文件的形式保存到磁盘中(也称为序列化,持久化),使用的时候读取该文件的保存路径读取文件内容(也称为解档,反序列化)

简单的对象归档,使用两个类:NSKeyedArichiver和NSKeyedUnarchiver

例子:

使用两个类:NSKeyedArichiver、NSKeyedUnarchiver

NSString *homeDirectory = NSHomeDirectory();       //获取根目录

NSString *homePath = [homeDirectory stringByAppendingPathComponent:@"自定义文件名,如test.archiver"];

NSArray *array = @[@"abc", @"123", @12];

BOOL flag = [NSKeyedArichiver archiveRootObject:array toFile:homePath];

if (flag) {

      NSLog(@"归档成功!");

}

自定义内容归档

①归档:

使用NSData实例作为归档的存储数据;

添加归档的内容-使用键值对;

完成归档。

②解档:

从磁盘读取文件,生成NSData实例;

根据NSData实例和初始化解档实例。

解档,根据Key访问Value

(3)上述方法都有一个致命的缺点,那就是都无法存储大批量的数据,有性能的问题。

如:使用归档。

数据的存取都必须是完整的,要求写入的时候要一次性写入,读取的时候要一次性全部读取,这涉及到应用的性能问题。

如果有1000条数据,此时要把1001条数据存入,那么需要把所有的数据取出来,把这条数据加上去之后,再存入。

创建步骤:

①创建一个简单的View based application

②选择项目文件,然后选择目标,添加libsqlite3.dylib库到选择框架。

③通过选择"File->New->File...->"选择Objective-C Class创建新文件,单击下一步。

④"sub class of"为NSObject,类命名为DBManager

⑤选择创建

⑥更新DBManger

(4)Core Data是苹果官方推荐使用的数据持久化方式,在使用的过程中,不需要导入数据库框架,也不需要使用SQL语句操作数据库,完全是按照面向对象的思想,使用实体模型来操作数据库。在使用的过程中需要注意的是,需要重新考虑生成数据库,并把之前数据库中数据进行移植。Core Data能够简化操作,但是它不支持跨平台使用,如果想实现跨平台,就需要使用SQLite来进行数据持久化。

5.iOS中bound和frame的区别

(1)frame指的是该View在父View坐标系统中的位置和大小。(参照点是父视图坐标系)

(2)bounds指的是该View在本身坐标系统中的位置和大小。(参照点是本身坐标系)

(3)bounds大小改变,frame的大小也改变

6.CALayer、UIView和绘图的API的关系

两者最大的区别是,图层不会直接渲染到屏幕上,UIView是iOS系统中界面元素的基础,所有的界面元素都是继承自它。它本身完全是由CoreAnimation来实现的。它真正的绘图部分,是由一个CALayer类来管理。UIView本身更像是一个CALayer的管理器。一个UIView上可以有n个CALayer,每个layer显示一种东西,增强UIView的展示能力。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容

  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,107评论 29 470
  • 1.OC的类可以多重继承吗?可以实现多个接口吗?要想实现类似多重继承如何实现?答:OC不可以实现多重继承。可以实现...
    欧辰_OSR阅读 1,960评论 0 30
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 11,943评论 4 60
  • 1.objective-c常见面试题:1、**OC **语言的基本特点OC 语言是 C 语言的一个超集,只是在 C...
    LZM轮回阅读 955评论 0 3
  • NumPy为何而来? 标准安装的Python中用列表(list)保存一组值,可以用来当作数组使用,不过由于列表的元...
    classtag阅读 1,993评论 0 4