ios 经典面试案例 (四)

1.服务器能否知道APNS推送后有没有到达客户端的方法?

APNS是苹果提供的远程推送的服务,APP开发此功能之后,用户允许推送之后,服务端可以向安装了此app的用户推送信息。但是APNS推送无法保证100%到达。

目前关于APNS苹果更新了新的策略,即 APNS/HTTP2.

如果服务器像APNS服务器推送信息之后,服务器能够接收到APNS是否真的成功像客户端推送成功了某个信息。这样在一定程度上提高了APNS的成功概率。

ios 经典面试案例 (四)_第1张图片
image

2.http与https的区别?

A:安全性上的区别:HTTPS是HTTP协议的安全加强版,通过在HTTP上建立加密层,对传输数据进行加密。主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性

B:表现形式:HTTPS站点会在地址栏上显示一把绿色小锁,表明这是加密过的安全网站,如果采用了全球认证的顶级EV SSL证书的话,其地址栏会以绿色高亮显示,方便用户辨认。

C:SEO:在2015年之前百度是无法收录HTTPS页面的,不过自从2015年5月份百度搜索全站HTTPS加密后,就已经可以收录HTTPS了。谷歌则是从2014年起便开始收录HTTPS页面,并且HTTPS页面权重比HTTP页面更高。从SEO的角度来说,HTTPS和HTTP区别不大,甚至HTTPS效果更好。

D:技术层面:如果要说HTTPS和HTTP的区别,最关键的还是在技术层面。比如HTTP标准端口是80,而HTTPS标准端口是443;HTTP无需证书,HTTPS需要CA机构颁发的SSL证书;HTTP工作于应用层,HTTPS工作于传输层。

3.objc在向一个对象发送消息时,发生了什么?

答案:objc在向一个对象发送消息时,runtime库会根据对象的isa指针找到该对象实际所属的类,然后在该类中的方法列表以及其父类方法列表中寻找方法运行,然后在发送消息的时候,objc_msgSend方法不会返回值,所谓的返回内容都是具体调用时执行的。

4.OS objc_msgSend 报错解决方案 以及 内存泄漏的问题?

objc_msgSend(self, @selector(doSomething), self);====>这个函数使用会报错:Too many arguments to function call, expected 0, have 3

错解决方案:选中项目 - Project - Build Settings - ENABLE_STRICT_OBJC_MSGSEND 将其设置为 NO 即可

ios 经典面试案例 (四)_第2张图片
image

之前32位的时候没问题,然后转换为64位之后就会发生EXC_BAD_ACCESS问题。

ios 经典面试案例 (四)_第3张图片
image

苹果官方文档:

Dispatch Objective-C Messages Using the Method Function’s Prototype
An exception to the casting rule described above is when you are calling the objc_msgSend function or any other similar functions in the Objective-C runtime that send messages. Although the prototype for the message functions has a variadic form, the method function that is called by the Objective-C runtime does not share the same prototype. The Objective-C runtime directly dispatches to the function that implements the method, so the calling conventions are mismatched, as described previously. Therefore you must cast the objc_msgSend function to a prototype that matches the method function being called.
Listing 2-14 shows the proper form for dispatching a message to an object using the low-level message functions. In this example, the doSomething: method takes a single parameter and does not have a variadic form. It casts the objc_msgSend function using the prototype of the method function. Note that a method function always takes an id variable and a selector as its first two parameters. After the objc_msgSend function is cast to a function pointer, the call is dispatched through that same function pointer


你必须先定义原型才可以使用,这样才不会发生崩溃:

int (*action)(id, SEL, int) = (int (*)(id, SEL, int)) objc_msgSend;

    action(self, @selector(doSomething:), 0);

题的搬运,不成敬意!

你可能感兴趣的:(ios 经典面试案例 (四))