OC:
struct | Class | |
---|---|---|
不同点 | 值类型 Value Type | 引用类型 reference type |
结构体只能封装数据 | 而类可以封装数据,还可以封装行为(实现函数) | |
结构体变量分配在栈空间 | 而对象分配在堆空间 | |
赋值为拷贝 | 类是指向地址 | |
没有继承 | 有继承 | |
相同点 | 都可以将多个数据封装为1个整体 | 都可以将多个数据封装为1个整体 |
struct dataStruct{
NSInteger age;
NSInteger year;
__unsafe_unretained NSString *name;//1.在`ARC`环境下,在结构体中使用`objc`对象,必须使用 `__unsafe_unretained`,这个是苹果的规定。否则会报错:ARC forbids Objective-C objects in struct
// NSDictionary *data;// 2.或者指定单独
};
[@interface](https://my.oschina.net/u/996807) ClassAndStruct()
{
NSInteger age;
NSInteger year;
NSString *name;
NSDictionary *data;
}
[@end](https://my.oschina.net/u/567204)
swift
struct | Class | |
---|---|---|
不同点 | 值类型 Value Type (不涉及引用计数) | 引用类型 reference type |
struct更适合看成是一个数据结构的实现体 | class更适合看成是一个对象的实现体 | |
struct 没有继承 | class 有继承功能 |
参考文章: OC结构:https://www.yiibai.com/objective_c/objective_c_structures.html OC:http://blog.csdn.net/yi_zz32/article/details/48582339?locationNum=11&fps=1 swift:https://www.cnblogs.com/linganxiong/p/5853090.html, http://blog.csdn.net/see_you_in_the_past/article/details/44653249, https://www.jianshu.com/p/8011b638b3a9
struct与class性能差异:https://www.jianshu.com/p/394e4fe614a0?utm_campaign=maleskine&utm_content=note&utm_medium=writer_share&utm_source=weibo&open_source=weibo_search