0x01 表示范围的结构体
NSrange概述
NSRange用来表示相关事物的范围,通常是字符串里的字符范围或者数组里的元素范围。
typedef struct _NSRange
{
unsigned int location; //The location field holds the starting position of the range.
unsigned int length; //The length is the number of elements in the range.
} NSRange;
location字段存放该范围的起始位置,如果值为NSNotFound则表示没有范围,如变量没有初始化的情况;
length字段是该范围内所含元素的个数。
创建NSrange的方法
1、直接给字段赋值:
NSRange range;
range.location = 17;
range.length = 4;
2、使用C语言形式的聚合结构赋值机制:
NSRange range = { 17, 4 };
3、使用Cocoa提供的一个快捷函数NSMakeRange() :
NSRange range = NSMakeRange (17, 4);
使用NSMakeRange()的好处就是在任何能够用到函数的地方就可以用到它,可以在方法调用中将其作为参数进行传递:
[anObject flarbulateWithRange:NSMakeRange (13, 15)];
0x02 几何数据类型
几何结构类型的名称都带有CG前缀,这些都是由Cocoa Graphics框架提供的,用于2D渲染。
Cocoa Graphics框架是用C语言编写的,所以在代码中可以使用C语言的数据类型。
CGPoint
CGPoint表示笛卡尔平面中的一个坐标(x,y):
struct CGPoint
{
float x;
float y;
};
CGSize
CGSize用来存储长度和宽度:
struct CGSize
{
float width;
float height;
};
CGRect
CGRect是一个矩形数据类型,由CGPoint和CGSize复合而成:
struct CGRect
{
CGPoint origin;
CGSize size;
};
Cocoa提供了创建这些数据类型的快捷函数:CGPointMake()、CGSizeMake()和CGRectMake()。
0x03 使用结构体而不创建对象的原因
程序(尤其是 GUI程序)会用到许多临时的坐标、大小和矩形区域来完成工作。
所有的Objective- C对象都是动态分配的,而动态分配会消耗大量的时间。
所以将这些结构体创建成第一级的对象会在使用过程中大大增加系统开销。