ToB企服应用市场:ToB评测及商务社交产业平台

标题: IOS面试整理 [打印本页]

作者: 天空闲话    时间: 昨天 00:16
标题: IOS面试整理
1、无序数组中的中位数

  1. int PartSort(int a[], int start, int end)
  2. {
  3.   int low = start;
  4.   int high = end;
  5.   //选取关键字
  6. int key = a[end];
  7. while (low < high)
  8. {
  9.   //左边找比key大的值
  10.   while (low < high && a[low] <= key)
  11.   {
  12.       ++low;
  13.   }
  14.    
  15.   //右边找比key小的值
  16.   while (low < high && a[high] >= key)
  17.   {
  18.       --high;
  19.   }
  20.    
  21.   if (low < high)
  22.   {
  23.       //找到之后交换左右的值
  24.       int temp = a[low];
  25.       a[low] = a[high];
  26.       a[high] = temp;
  27.   }
  28. }
  29. int temp = a[high];
  30. a[high] = a[end];
  31. a[end] = temp;
  32. return low;
  33. }
复制代码
2、id 和 instanceType 有什么区别?

雷同点

instancetype 和 id 都是万能指针,指向对象。
不同点:

1.id 在编译的时间不能判断对象的真实类型,instancetype 在编译的时间可以判断对象的真实类型。
2.id 可以用来界说变量,可以作为返回值类型,可以作为形参类型;instancetype 只能作为返回值类型。
3、[self class]和[super class]的区别

当使用[self class]时,这时的self是Son,在使用objc_msgSend时,第一个参数是receiver也就是self,也是 Son* son这个实例。第二个参数,要先找到class这个方法的selector,先从Son这个类开始找,没有,然后到Son的父类 Father中去找,也没有,再去Father的父类NSObject去找,一层一层向上找之后,在NSObject的类中发现这个class方法,而 NSObject的这个class方法,就是返回receiver的类别,所以这里输出Son。
当使用[super class]时,这时要转换成objc_msgSendSuper的方法。先构造objc_super的布局体吧,第一个成员变量就是self, 第二个成员变量是Father,然后要找class这个selector,先去superClass也就是Father中去找,没有,然后去Father 的父类中去找,结果还是在NSObject中找到了。然后内部使用函数objc_msgSend(objc_super->receiver, @selector(class)) 去调用,此时已经和我们用[self class]调用时雷同了,此时的receiver还是Son* son,所以这里返回的也是Son
4、self和super的区别


7、loadView的作用?

loadView方法会在每次访问UIViewController的view(比如controller.view、self.view)而且view为nil时会被调用,此方法主要用来负责创建UIViewController的view(重写loadView方法,并且不需要调用[super loadView])
这里要提一下 [super loadView],[super loadView]做了下面几件事。

综上,在需要自界说UIViewController的view时,可以通过重写loadView方法且不需要调用[super loadView]方法。
8、keyWindow 和 delegate的window有何区别


一样寻常环境下 delegate.window 和 keyWindow 是同一个对象,但不能保证keyWindow就是delegate.window,因为keyWindow会因为makeKeyAndVisible而变革,例如,程序中添加了一个悬浮窗口,这个时间keywindow就会变革。
9、说一下 JS 和 OC 互相调用的几种方式?


10、如何让自己的类用copy修饰符?如何重写带copy关键字的setter?


11、深拷贝与浅拷贝

浅拷贝只是对指针的拷贝,拷贝后两个指针指向同一个内存空间,深拷贝不光对指针进行拷贝,而且对指针指向的内容进行拷贝,经深拷贝后的指针是指向两个不同地点的指针。
当对象中存在指针成员时,除了在复制对象时需要考虑自界说拷贝构造函数,还应该考虑以下两种情况:

copy方法:如果是非可扩展类对象,则是浅拷贝。如果是可扩展类对象,则是深拷贝。
mutableCopy方法:无论是可扩展类对象还是不可扩展类对象,都是深拷贝。
12、@property的本质是什么?ivar、getter、setter是如何天生并添加到这个类中的


13、@protocol和category中如何使用@property


14、iOS内存分区环境


15、iOS内存管理方式


16、KVC实现原理


17、KVO的实现原理



KVO-键值观察机制,原理如下:

18、如何手动触发KVO方法


19、block和delegate的区别


20、Http 和 Https 的区别?Https为什么更加安全?


21、HTTPS的连接创建流程

HTTPS为了分身安全与效率,同时使用了对称加密和非对称加密。在传输的过程中会涉及到三个密钥:

如上图,HTTPS连接过程大致可分为八步:

22、TCP 和 UDP的区别



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4