Object-C学习笔记(二 )

今天了解了下Object-C中的一些数据结构类型,和操作方式。

Object-C 封装了一些常用的Struct,例如:NSRange、NSSize、NSPoint、NSRect 等便于大家的使用,之所以把他们定义成Struct而没有封装成类,是因为,Object-C的对象都是动态分配内存的,如果封装成类的话面临的是更加频繁的内存分配操作,这将会消耗大量的时间,所以将其丰准工程基本的结构体,这样可以大大的节省系统开销。

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 中的方法进行操作。

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








转载于:https://my.oschina.net/fuckphp/blog/93217

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值