Chinaunix首页 | 论坛 | 博客
  • 博客访问: 712442
  • 博文数量: 102
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 1748
  • 用 户 组: 普通用户
  • 注册时间: 2012-02-23 15:42
个人简介

寻找严肃、沉默和专注的力量。

文章分类

全部博文(102)

文章存档

2015年(26)

2014年(8)

2013年(68)

分类: 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 一起使用,首先查找字符串所在位置,然后用该方法进行删除操作。


阅读(1789) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~