寻找严肃、沉默和专注的力量。
分类: iOS平台
2015-03-05 16:46:15
本文转载自:http://my.oschina.net/fuckphp/blog/93217?p=1
Object-C 封装了一些常用的Struct,例如:NSRange、NSSize、NSPoint、NSRect 等便于大家的使用,之所以把他们定义成Struct而没有封装成类,是因为,Object-C的对象都是动态分配内存的,如果封装成类的话面临的是更加频繁的内存分配操作,这将会消耗大量的时间,所以将其封装成基本的结构体,这样可以大大的节省系统开销。
NSRange
NSRange用来表示某些事务的范围
typedef struct _NSRange{
unsigned int location;
unsigned int length;
} NSRange
有三种方式去使用这个结构:
第一种 起始位置为 10 长度为 4
NSRange range;
range.location = 10;
range.length = 4
第二种
NSRange range = {10, 4};
第三种
NSRange range = NSMakeRange(10, 4);
NSPoint
用于表示笛卡尔平面中的一个点,可以理解为一个坐标(x, y)
typedef struct _NSPoint{
float x;
float y;
} NSPoint;
NSSize
用于存储长度和宽度
typedef struct _NSSize{
float width;
float height;
} NSSize;
NSRect
这是一个复合结构,由以上两个结构组成,如果要画一个矩形就可以使用这个结构
typedef struct _NSRect{
NSPoint origin;
NSSize size;
} NSRect;
以上三个结构除了正常的赋值以外还可以分别使用
NSMakePoint()
NSMakeSize()
NSMakeRect()
函数进行操作
字符串
Cocoa中的字符串类是NSString,之前输出Hello World的时候起始就接触过了,他的字面值使用@"字符串内容" 来表示的。
strWithFormat
+ (id) stringWithFormat: (NSString *) format,...
这是一个类似sprintf函数的一个方法,用于格式化一个字符串,并将处理好的字符串返回,这个方法参数列表的最后部分,用 ,... 来表示 后面可以拥有任意数量的参数,前面的 返回值类型为 id 这个跟 C语言中返回 一个 void* 的值类似,只不过这个用于表示返回的是一个对象(其实返回对象也就是指针)。
length
- (unsigned int) length;
NSString有个方法为 length 可以非常方便的返回字符串包含多少个字符,这个方法已经对Unicode里的一些多字节字符文字进行了处理,不会出现由于多字节字符占用空间多余1个字节而导致最终的字符串度获取的不准确的问题。
isEqualToString
- (BOOL) isEqualToString:(NSString *) aString;
这个方法用于比较两个字符串是否相等,和JAVA一样,字符串比较不可以直接进行比较,因为直接用 双等号表达式 进行比较,比较的结果是指向两个字符串的地址。
compare
- (NSComparisonResult) compare: (NSString *) string
option: (unsigned) mask;
该方法用于比较两个字符串大小,当调用该方法的时候,该方法会对两个字符串按位进行比较,并将比较结果存放在一个枚举类型的变量中,返回的 NSComparisonResult 的结构为
typedef enum _NSComparisonResult {
NSOrderedAscending = -1,
NSOrderedSame,
NSOrderedDescending
} NSComparisonResult;
与C中 qsort等函数类似,返回的枚举变量值分别表示 左边 小于右边 等于右边 大于右边。
这个方法中的options参数用于控制两个字符串的比较规则,其值分为三种,用 逻辑运算符 | 进行分隔。
NSCaseInsensitiveSearch 不区分大小写
NSLiteralSearch 区分大小写
NSNumericSearch 不比较实际的字符值,只比较字符长度
hasPrefix hasSuffix
- (BOOL) hasPrefix: (NSString *)aString;
- (BOOL) hasSuffix: (NSString *)aString;
这两个方法分别是查看一个字符串的前缀 或者 后缀是否为某个字符串,比如你想查看该文件的后缀是否知 .zip 就可以使用该方法实现。
rangeOFString
- (NSRange) rangeOFString: (NSString *)aString;
用于查找一个字符串在另一个字符串中的位置,并通过 NSRange 结构返回。
以上这些操作都是对字符串进行查找比较或者查看长度的操作,没有涉及到字符串连接修改方面的方法,这是因为 NSString这个字符串类是不具有可变性的,也就是说你可以最这个字符串进行操作,但是不可以修改他的值,如果你想修改他的值,必须使用他的子类 NSMutableString 中的方法进行操作。
NSMutableString
Cocoa提供了一个NSString的子类叫做 NSMutableString 这个子类跟 Java 中的 StringBUffer 有些相似,他也提供了一些字符串操作的方法。
使用 stringWithCapacity 可以创建一个 NSMutableString 类的对象。
+ (id) stringWithCapacity: (unsigned) capacity;
方法参数需要传入一个预分配的空间大小,对象创建后归根据这个值进行预分配,从而保证后续操作的执行速度。
appendString appendFormat
- (void) appendString : (NSString *) aString;
- (void) appendFormat : (NSString *) format,...;
这两个方法用于对一个字符串后面附加一个新的字符串,这个跟Java中 stringBuffer的append方法类似,字符串会直接附加在字符串后面,而不会重新分配新的内存空间。
deleteCharactersInRange
- (void) deleteCharactersInRange: (NSRange) range;
这个方法用于删除一个字符串中的某个部分,这个方法通常会跟 rangeOFString 一起使用,首先查找字符串所在位置,然后用该方法进行删除操作。