ios 基础知识整理(一)

2020-09-11  本文已影响0人  90后的晨仔

一、Swift 和OC 如何相互调用?

1.Swift 调用 OC代码
2.OC 调用 Swift代码

二、类(class) 和 结构体(struct) 有什么区别?

1.Class 是引用类型(指针类型)

引用类型只会使用引用对象的一个"指向"; 赋值给var、let或者给函数传参,是将内存地址拷贝一份,类似于制作一个文件的替身(快捷方式、链接),指向的是同一个文件。属于浅拷贝(shallow copy)。 比如Class,是在堆空间上存储和操作的。

2.Struct 是值类。

值类型在传递和赋值时将进行复制; 赋值给var、let或者给函数传参,是直接将所有内容拷贝一份,类似于对文件进行copy、paste操作,产生了全新的文件副本。属于深拷贝(deep copy)。比如结构体,枚举,是在栈空间上存储和操作的。

三、类对象与元类对象有什么区别和联系?

1.实例对象通过"isa"指针找到类对象,类对象中存储方法列表等信息。类对象通过“isa”指针可以找到元类对象,从而可以访问类对象的类方法等一些信息。类对象与元类对象都是objc_class数据结构,都是继承于objc_object,所以才有isa指针。所以才有上述所说的那些操作。
2.元类的isa指针都是指向root Class(根元类对象),根元素类对象指向根类对象。如果根类中找不到方法就会直接去根类对象去查找相同的实例方法。

四、 调用的类方法没有实现,但是实例方法有实现,会不会崩溃?

不会,因为通过isa指针查找的顺序,如果根元类对象中找不到类对象的方法列列表的话就会通过“isa”指针去根类对象查找同名的实例方法与实现。然后产生实际的调用。
上一篇 下一篇

猜你喜欢

热点阅读