iOS 面试题总结

2021-03-15  本文已影响0人  iOS鑫

isa指针:

在Objective-C中,任何类的定义都是对象。类和类的实例(对象)没有任何本质上的区别。任何对象都有 isa 指针。

isa 是一个Class 类型的指针。 每个实例对象有个 isa 的指针,他指向对象的类,而Class里也有个 isa 的指针, 指向 meteClass (元类)。元类保存了类方法的列表。当类方法被调用时,先会从本身查找类方法的实现,如果没有,元类会向他父类查找该方法。同时注意的是:元类也是类,它也是对象。元类也有 isa 指针,它的 isa 指针最终指向的是一个根元类。根元类的 isa 指针指向本身,这样形成了一个封闭的内循环。

const 含义

static关键字

  1. 函数体内 static 变量的作用范围为该函数体,不同于 auto 变量,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值;
  2. 在模块内的 static 全局变量可以被模块内所用函数访问,但不能被模块外其它函数访问;
  3. 在模块内的 static 函数只可被这一模块内的其它函数调用,这个函数的使用范围被限制在声明它的模块内;
  4. 在类中的 static 成员变量属于整个类所拥有,只会初始化一次,并且在程序退出时才会回收内存;
  5. 在类中的 static 成员函数属于整个类所拥有,这个函数不接收 this 指针,因而只能访问类的 static 成员变量。

volatile关键字

volatile 的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是

self. 跟 self-> 区别?

self. 是调用 get 方法或者 set 方法 self 是当前本身,是一个指向当前对象的指针 self-> 是直接访问成员变量

懒加载

懒加载——也称为延迟加载,只在用到的时候才去初始化,比如控制器的view,在第一次用到view时才会调用loadView方法进行创建,所谓懒加载,写的是其get方法。我觉得最好也最简单的一个列子就是tableView中图片的加载显示了。一个延时载,避免内存过高,一个异步加载,避免线程堵塞。
注意:如果是懒加载的话则一定要注意先判断是否已经有了,如果没有那么再去进行实例化

Objective C中的selector 是什么?

你可以理解 @selector()就是取类方法的编号,他的行为基本可以等同C语言的中函数指针,只不过C语言中,可以把函数名直接赋给一个函数指针,而 Objective-C的类不能直接应用函数指针,这样只能做一个@selector语法来取.它的结果是一个SEL类型。这个类型本质是类方法的编号 (函数地址)。 方法和选择器有何不同? 答案:selector是一个方法的名字,method是一个组合体,包含了名字和实现。通过一个selector可以找到方法地址,进而调用一个方法

其他

上一篇下一篇

猜你喜欢

热点阅读