常用数据类型
范围结构体
NSRange
表示相关事物的范围
字符串的字符范围
数组的元素范围
location字段:存放该范围的起始位置
值NSNotFound:用来表示无意义范围
length字段:该范围内所含元素的个数
创建范围结构体
直接给字段赋值
表示相关事物的范围
用C语言的聚合结构赋值机制
用NSMakeRange()
好处:可以在任何能够使用函数的地方使用它
几何数据类型
点NSPoint
代表笛卡几平面中一个点
(x,y)
NSMakePoint()
尺寸 NSSize
NSMakeSize()
区域 NSRect
NSMakeRect()
字符串
NSString
标志是双引号内的字符串前的@
创建字符串
省略号(…),它告诉我们(和编译器),这个方法可以接收多个以逗号隔开的其他参数
就像printf()和NSLog()一样
类方法:
stringWithFormat
声明方法时添加了加号+,是一个类方法
是一个工厂方法,提供的参数创建新对象实现协议
类方法也可以用来访问全局数据
注意
我们创建的一般都是实例方法
声明时,添加减号-
关于大小:
NSString的length:方法
能够准确无误地处理国际字符串
如:含有俄文、中文或者日文字符的字符串
以及使用Unicode国际字符标准的字符串
比较策略:
isEqualToString:
比较接收方和当作参数传递来的字符串
返回BOOL(YES或NO)型数据
表示两个字符串的内容是否相同
-(BOOL) isEqualToString: (NSString *) aString;
compare:
比较接收方和当作参数传递来的字符串
返回NSComparisonResult型数据
NSOrderedAscending
NSOrderedSame
NSOrderedDescending
compare:option:
NSCaseInsensitiveSearch
NSLiteralSearch
NSNumericSearch
字符串内是否还包含别的字符串:
检查字符串是否以另一个字符串开头
-(BOOL) hasPrefix: (NSString *) aString;
-(BOOL) hasSuffix: (NSString *) aString;
判断字符串是否以另一个字符串结尾
使用举例:
NSString *filename = @”draft-chapter.pages”;
If ([filename hasPrefix: @”draft”]
{
// this is a draft
}
If ([filename hasSuffix: @”.mov”]
{
//this is a movie
}
rangeOfString:
-(NSRange) rangeOfString: (NSString *) aString;
判断字符串内的某处是否包含其他字符串
可变字符串
NSString的子类NSMutableString
创建
capacity:
+ (id) stringWithCapacity: (unsigned) capacity;
这个容量只是给NSMutableString的一个建议
字符串的大小并不仅限于所提供的容量
这个容量仅是个最优值。
附加新字符串
appendString:
接受参数aString
然后将其复制到接收对象的末尾
appendFormat:
工作方式与stringWithFormat:类似
但它将格式化的字符串附加在接收字符串的末尾,而不是创建新的字符串对象
Eg:
-(void) appendString: (NSString *) aString;
-(void) appendFormat: (NSString *)format,…;
集合
不可变数组
NSArray
存储对象的有序列
可以在NSArray中放入任意类型的对象
NSString、Car、Shape、Tire
或其要存储的对象表
两个限制
只能存OC的对象,而不能存C语言中的基本数据类型
如:int、float、enum、struct或NSArray中随机指针
不能存储nil(对象的零值或NULL值)
创建一个新的NSArray
arrayWithObjects:
可变数组
NSMutableArray
可变数组
可以随意地添加和删除数组中的对象
创建一个新的可变数组
arrayWithCapacity:
+ (id) arrayWithCapacity: (unsigned) numltems:
addObject:在数组末尾添加对象
removeObjectAtIndex:删除对象
枚举
NSEnumerator
objectEnumerator:
-(NSEnumerator *) objectEnumerator;
向数组请求枚举器
reverseObjectEnumerator:
NSEnumerator *enumerator;
enumerator = [array objectEnumerator];
id thingie;
while (thingie = [enumerator nextObject])
{
NSLog (@”I found %@”,thingie);
}
从后向前浏览集合
nextObject:下一个对象
快速枚举
这个循环体将会遍历数组中的每个元素
并且用变量string存储每个数组值
for (NSString *string in array)
{
NSLog (@”I found %@”, string);
}
字典
NSDictionary
是关键字及其定义的集合
在给定的关键字(通常是一个NSString字符串)下,存储一个数值(可以是任何类型的对象)
可以用这个关键字来查找相应的数值
dictionaryWithObjectsAndKeys:
创建字典
接受对象和关键字交替存储系列,以nil值作为终止符
+ (id) dictionaryWithObjectsAndKeys: (id) firstObjext,…;
可变字典
NSMutableDictionary的dictionaryWithCapacity:
创建新的可变字典
并指定一个建议大小
+ (id) dictionaryWithCapacity: (unsigned int) numltems;
setObject:forKey:
给字典添加元素,如关键字已存在则替换原有的值
-(void) setObject: (id) anObject forkey: (id) aKey;
removeObjectForKey:
删除指定的元素
各种数值
NSNumber
包装基本数据类型
以对象形式实现
把简单数据类型封装成一个对象
创建新的NSNumber对象的类方法:
+(NSNumber *)numberWithChar: (char) value;
+(NSNumber *)numberWithInt:(int)value;
+(NSNumber *)numberWithFloat: (float) value;
+(NSNumber *)numberWithBool: (BOOL) value;
NSValue
NSNumber是NSValue的子类
可以包装任意值
可用NSValue将结构放入NSArray和NSDictionary
+(NSValue *)valueWithBytes:(const void *)value
objCType:(const char *)type;
创建新的NSValue对象的类方法:
传递的参数是你想要包装的数值的地址
如一个NSSize或你自己的struct
通常,得到的是想要存储的变量的地址
在C语言中使用操作符&
NSNull
表示“这里什么都没有”的值
Cocoa里最简单的类了,它只有一个方法
+(NSNull *)null
添加到集合中:
[contact setObject: [NSNull null ] forKey: @” home fax machine ”];
访问它的方法如下:
id homefax;
homefax = [contact objectForKey: @” home fax machine ”];
if (homefax = = [NSNull null ]
{
// . . . no fax machine . rats.
}