注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

时间记录器

记录我的Linux、Android学习之路

 
 
 

日志

 
 

数据类型操作  

2012-04-03 14:18:29|  分类: iOS |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
Cocoa

Cocoa框架实际上由Foundation Kit和AppKit两个不同的框架组成.Foundation框架中有很多有用的,面向数据的低级类和数据类型.此框架主要用来处理界面无关的内容,AppKit则包含了所有的用户接口对象和高级类.

结构体类型

Cocoa中一些类据类型是使用struct实现的,不使用对象实现的原因就在于性能.对象的开销比较大(对象都是动态分配的).所以对这种数据类型可以使用三种方式赋值.

typedef struct _NSRange{ 
    unsigned int location; 
    unsigned int length; 
}NSRange;

1. 
NSRange range; 
range . lcation = 17; 
range . length = 4;

2. 
NSRange range = ( 17 , 4 ) ;

3. 
NSRage range = NSMakeTange (17,4);

其他还有NSPoint,NSSize,NSRect等数据类型也是如此,除了1,2种赋值方法外,也都有对应的函数可以生成数据:NSMakePoint(),NSMakeSize(),NSMakeRect()等.

NSString

@""是NSString字面量写法.

NSString可以准确地处理Unicode字符串.

+ stringWithFormat:类级方法,通过格式化字符串和一组参数输出格式化后的结果.

– isEqualToString:对象级方法,比较与所给的字符串是否相同.

Cocoa中的字符串是对象,所以不能用== 号来比较.如果使用== 号比较两个字符串对象,那事实上是比较了两个对象的指针.

– compare:与给定的字符串比较(区分大小写),返回一个枚举值作为结果.

– compare:options:

– compare:options:range:

– compare:options:range:locale:字符串比较方法,带选项的版本(如:是否区分大小写)

– hasPrefix:测试是否以给定的字符串开头

– hasSuffix:测试是否以给定的字符串结尾

– rangeOfString:查询给定字符串在字符串对象中的位置.

NSMutableString

NSString的子类, NSMutableString是NSString的可修改版本.

+ stringWithCapacity:容量建议值.对象会以此方法给出的建议值划分出一块内存作为可变字符串对象的初始大小.合理使用可以提高性能.

– appendFormat:向字符串对象追加内容.

– appendString:使用格式化方式向字符串对象追加内容.

– deleteCharactersInRange:从字符串对象的指定范围中删除字符串.

集合

NSArray

NSArrary是一个用来存储对象的有序列表.

限制:只能存储Objective-C对象.不能存储C语言中的基本数据类型(如int,float,enum,struct,或者NSArray中的随机指针),也不能存储nil或者NULL值.

– count获得列表包含的对象数.

– objectAtIndex:获取特定索引处的对象.索引值超出范围时,将引发一个异常.

Cocoa框架中对象往往都是以类族的形式实现的.如:NSArray对象可能会在运行时发现其实运作的是NSCFArray(来自Core Foundation框架(C语言的实现版本),很多Cocoa对象都是如此做桥接的).

NSMutableArray

NSArray的可变版本.

+ arrayWithCapacity:以建议值作为初始化大小.

– addObject:追加对象

– removeObjectAtIndex:从指定索引处删除对象

NSEnumerator

遍历集合时:

使用for循环向集合对象发送objectAtIndex:消息来获取对象.

使用枚举对象来完成遍历集合的工作.

Mac OS X Tiger 之前的系统,支持的语法:

NSEnumerator *enumerator;

enumerator = [array objectEnumerator];

id thingie;

while (thingie = [enumerator nextObject ]){ 
    //something to do. 
}

即向集合对象发送objectEnumerator消息,以获取一个枚举对象(或者NSEnumerator类或其子类的实例),然后在while循环中向此枚举对象循环发送nextObject以依次获取枚举中的每个对象,直到枚举的末尾(直到nextObject消息返回一个nil对象).

Mac OS X Leopard之后的系统可使用如下语法:

for (NSString *string in array){ 
    //to do something. 
}

NSDictionary / NSMutableDictionary

字典对象(及可变型字典对象).

+ dictionaryWithObjectsAndKeys:使用所给的键值对建立字典.

– setObject:forKey:添加字典项

– removeObjectForKey:删除字典项

不要扩展Cocoa框架下的类

Cocoa中许多类都是以类簇的方式实现的.即它们是一群隐藏在通用接口下的与实现相关的类.

比如:使用NSString对象的是个,实际上获得的可能是NSLiteralString,NSCFString,NSSimpleCString,NSBallofString或者其他未写入文档的与实现相关的对象.

不要想着为以类簇方式实现的类添加子类,这可能是很痛苦的事情,想要扩展这类类的能力时,可考虑" 复合 "或者" 类别 ".

数值类

NSNumber

用于包装基本数据类型,如:int,float等.成为一个对象,以便将基本数据类型放入集合类中.

+ numberWithBool:由布尔型生成对象

+ numberWithChar:字符型

+ numberWithDouble :双精度浮点型

+ numberWithFloat:单精度浮点型

+ numberWithInt:整型

+ numberWithInteger: ObjC整型

+ numberWithLong:长整型

+ numberWithLongLong:长长整型

+ numberWithShort:短整型

使用以下方法可以从对象中提取回基本数据型值.

– boolValue

– charValue

– decimalValue

– doubleValue

– floatValue

– intValue

– integerValue

– longLongValue

– longValue

– shortValue

都是顾名思义的方法名.

NSValue

NSValue是NSNumber的父类,可以用来包装任意值.NSNumber不能包装的struct,也可以用这个类来包装.

+ valueWithBytes:objCType:第一参数传入要包装的数值的地址.第二个参数为数据类型的描述字符串(一般可以直接用@encode命令来生成)

NSRect rect = NSMakeRect(1,2,30,40);

NSValue *value = [NSValue valueWithBytes: & rect objCType: @encode( NSRect ) ];

[array addObject:value];

使用- getValue:方法可以从NSValue对象中提取出数据的指针(可以看到get前辍的方法约定,总是用来提取指针,而不是值).

NSValue中有一些方法,可以用来快速包装Cocoa常用结构体数据类型:

+ valueWithPoint:快速包装NSPoint对象

+ valueWithRange: NSRange

+ valueWithRect: NSRect

+ valueWithSize: NSSize

NSNull

空类型,由于集合类中不能添加 nil值(被用来识别为集合的结尾处),所以你可以使用NSNull对象添加到集合中,以表示空(无,没有)成员.
  评论这张
 
阅读(603)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017