struct
值类型,深拷贝,分配在栈上
没有析构函数
不能继承
不会发生内存泄漏,线程安全
class
引用类型,浅拷贝,分配在堆上
有析构函数
可以继承
可以有单例
每一个成员变量都必须初始化
相同点
操作符函数、泛型、协议采纳、观察器
Tips
OC里面无法调用Swift里的struct,因为要在OC里调用Swift代码的话,对象需要继承自NSObject。
struct不能被序列化成NSData,不能归解档,class可以,因为归解档的类必须遵守NSCoding协议,而NSCoding只适用于继承自NSObject的类,struct不能遵守NSCoding协议。
解决方案:
定义一个protocol,包含两个方法:
1.从结构体中得到一个NSDictionary对象
2.使用一个NSDictionary对象实例化结构体
NSDictionary可以使用NSKeyedArchiver进行序列化
好处:
所有遵守该协议的结构体都可以被序列化
struct在方法里修改Property的时候,需要加上mutating,class不需要。
struct是静态派发