iOS结构体

结构体尺寸

1.结构体中每个数据成员的偏移位置是数据成员本身尺寸的倍数。
2.结构体的尺寸是最大基础类型数据成员尺寸的倍数。
3.如果有结构体嵌套时,被嵌套的结构体成员的偏移位置就是被嵌套结构体中尺寸最大的基础类型数据成员尺寸的倍数。嵌套结构体的尺寸则是所有被嵌套中的以及自身中的最大基础类型数据成员尺寸的倍数。

当我们在定义结构体时如果数据成员的定义顺序安排的不合理就有可能会导致多余内存空间的占用和浪费

按基础数据类型的尺寸从小到大的顺序进行排列。

OC类的数据成员和尺寸

OC类中定义的属性顺序会在编译时进行优化调整,其调整的规则就是先按数据类型的尺寸从小到大进行排列,相同尺寸的数据成员则按字母顺序进行排列。

因此我们在定义OC类时不需要考虑属性的定义顺序,系统会优化这些顺序以便达到最小的内存占用。

在结构体中定义OC对象数据成员时有如下的使用限制:
1.结构体对象的实例只能在栈内存中建立,而不能在堆内存中建立。
2.结构体对象不能以值的形式进行函数参数的传递以及作为函数的返回。
3.结构体对象是可以以指针的形式作为参数传递。
4.如果我们在堆中建立了一个结构体实例对象,那么请在销毁结构体内存之前,先手动将所有OC数据成员置为nil。

C++类中可以将一个OC对象声明为其数据成员。与结构体不同的是C++类中如果有OC对象数据成员时,总是会在构造函数中将OC对象数据成员值设置为nil, 同时会在析构函数中再次将OC对象数据成员设为nil并减少引用计数。 并且无论你是否重写了构造函数和析构函数,上述的两个行为都会被插入到构造和析构代码中。因此在C++类中可以放心的使用OC对象数据成员。

原文链接:https://www.jianshu.com/p/1369508e477d

你可能感兴趣的:(iOS结构体)