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)
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:http://www.javashuo.com/article/p-xstlmvpg-hc.html, http://blog.csdn.net/see_you_in_the_past/article/details/44653249, https://www.jianshu.com/p/8011b638b3a9html
struct与class性能差别:https://www.jianshu.com/p/394e4fe614a0?utm_campaign=maleskine&utm_content=note&utm_medium=writer_share&utm_source=weibo&open_source=weibo_searchswift