1. 范围的作用
第一个结构体是NSRange:
typedef struct _NSRange{
unsigned int location;
unsigned int length;
}NSRange;
这个结构体用来表示相关事物的范围,通常是字符串里的字符范围或数组里的元素范围,location字段存放该范围的起始位置,而length字段则是该范围内所含元素的个数。在字符串“Objective-C is a cool language”中,单词cool可以用location为17,length为4的范围来表示。也许由于location字段未被初始化,所以它的值可以是NSNotFound,用来表示无意义范围。
可以用三种方法创建新的NSRange。
第一种:直接给字段赋值
NSRange range;
range.location=17;
range.length=4;
第二种:应用C语言的聚合结构赋值机制??
NSRange range={17,4};
第三种:Cocoa提供的一个快捷函数NSMakeRange()
NSRange range=NSMakeRange(17,4);使用NSMakeRange()的好处是你可以在任何能够使用函数的地方使用它,例如在方法调用中将其当成参数传递
[anObject flarbulatewithRange: NSMakeRange(13,15)];
2. 几何数据类型
NSPoint 代表的是笛卡尔平面中的一个点(x,y)
typedef struct _NSPoint{
float x;
float y;
}NSPoint;
NSSize用来存储长度和宽度
typedef struct _NSSize{
float width
float height;
}NSSize;
在之前的Shapes程序中,我们本可以用一个NSPoint和一个NSSize来表示形状,而不是用自定义的表示举行的struct来表示形状。但是当时,我们是想让程序尽可能简单。Cocoa提供了一个矩形数据类型,它是由点和大小复合而成的:
typedef struct _NSRect{
NSPoint origin;
NSSize size;
}NSRect;
Cocoa也为我们提供了创建这些数据类型的快捷函数:NSMakePoint() NSMakeSize() NSMakeRect()
说明:为什么这些数据类型是C的struct而不是对象呢?原因归结起来就是因为性能,程序会用到许多临时的点、大小和矩形来完成它们的工作。所有的Objective-C对象都是动态分配的,而动态分配是一个代价较高的操作,它会消耗大量的时间,所以讲这些结构创建成第一等级的对象都会在使用过程中增加大量的系统开销