ios 基础知识整理(三)

一、远程推送原理

推送流程图.jpg

      当设备联网的时候都会与苹果的APNS服务器建立一个长链接,当我们的后台服务器(或者叫:应用程序的服务器)(Provider)推送一条通知的时候,会先把要发送的消息、iPhone的标识打包,发给苹果的APNS服务器。 接着APNS服务器会在自身已经注册Push服务的设备列表中查找有相应标识的设备,并把消息发送到iPhone。iPhone把发来的消息传递给相应的应用程序,并且按照设预先设定好的格式在设备上弹出通知提醒。

二、http 与 https 的区别是什么?

参考博客一
参考博客二

  • http是超文本传输协议,数据明文传输,不能保障数据传输的安全性。容易被抓包。
  • http的连接很简单,是无状态的。并且使用的端口是80。不能验证通信方的身份,因此可能会遭遇伪装。
  • https 则是具有安全性的SSL加密传输协议。端口使用的是443。
  • Https协议需要使用CA付费申请证书,是具有安全性的 SSL 加密传输协议。

三、深拷贝与浅拷贝

1.两者的定义
  • 浅拷贝: 并不会进行真正的复制,而是复制的对象和原对象都指向同一个地址。
  • 深拷贝: 真正的复制了一份,复制的对象指向了新的地址。
2.总结
  • 深拷贝就是内容拷贝,浅拷贝就是指针拷贝。
  • 本质的区别在于:
    (1).是否开启新的内存地址。
    (2).是否影响内存地址的引用计数。

四、反射机制如何使用?可以参考这篇博客

// SEL和字符串转换
FOUNDATION_EXPORT NSString *NSStringFromSelector(SEL aSelector);
FOUNDATION_EXPORT SEL NSSelectorFromString(NSString *aSelectorName);
// Class和字符串转换
FOUNDATION_EXPORT NSString *NSStringFromClass(Class aClass);
FOUNDATION_EXPORT Class __nullable NSClassFromString(NSString *aClassName);
// Protocol和字符串转换
FOUNDATION_EXPORT NSString *NSStringFromProtocol(Protocol *proto) NS_AVAILABLE(10_5, 2_0);
FOUNDATION_EXPORT Protocol * __nullable NSProtocolFromString(NSString *namestr) NS_AVAILABLE(10_5, 2_0);

通过上边的方法可以动态的创建自己需要的实例,也可以动态的选择调用哪一个方法。

//1.将字符串@"ViewController"转换成Class。
Class class = NSClassFromString(@"ViewController");
//2.创建控制器的实例。
ViewController *vc = [[class alloc] init];
//3.把对应的"reloadData"方法名生成SEL。
SEL selector = NSSelectorFromString(@"reloadData");
//4.执行该方法
[vc performSelector:selector];

五、SDWebImage 加载图片的原理

参考的这篇博客这里我只是做了整理总结。

加载原理的流程图.png

原理文字描述: SDWebImage 采用的是二级缓存的机制。当我们调用从网络获取图片的时候,会根据图片的URL先去本地内存中查找,如果查找到的话就直接展示,若没有找到的话就会去硬盘中去查找,若查找到的话就展示,未查找到就去网络请求下载图片,下载完成之后将图片进行解码,解码后去展示图片,然后在将图片保存到内存硬盘中进行缓存。

六、runtime 的消息转发流程是什么?整理参考这篇博客,像原文作者致敬。

Snip20201225_1.png

利用上图进行分析总结消息转发的流程:
例如现在有一个对象叫JCCat,然后又有一个方法叫eat。方法调用为[JCCat eat]。

  1. 动态解析方法
    当接收到未知消息的时候(假设JCCat对象中的eat方法未实现),runtime 会调用+(BOOL) resolveInstanceMethod:(实例方法) 或者+resolveClassMethod:(类方法)。
    2.备用接收者
    若以上方法做了相关的处理,那么消息会正常处理。若以上方法没有做处理,runtime会调用- (id)forwardingTargetForSelector:(SEL)aSelector方法。若该方法返回了一个非nil(也不能是self)的对象,而且该该对象实现了这个方法,那么这个对象就成了消息的接收者,消息就被分发到改对象。使用情况:通常在对象内部使用,让内部的另一个对象处理消息,在外边看起来就像是该对象处理了消息。
    3.完整的消息转发
    在- (void)forwardInvocation:(NSInvocation *)anInvocation方法中选择转发消息的对象,其中anInvocation对象封装了未知消息的所有细节,并保留调用结果发送到原始调用者。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,734评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,931评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,133评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,532评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,585评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,462评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,262评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,153评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,587评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,792评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,919评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,635评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,237评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,855评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,983评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,048评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,864评论 2 354

推荐阅读更多精彩内容