一、一些有用的数据类型
NSRange范围
typedef struct
}NSRange;
unsigned int是C语言中的int类型
location用来存放字段范围的起始位置,length是该范围内所含元素的个数
字符串”Objective-C is a cool language”中cool的location为17,length为4
三种赋值方式:
(1)
NSRange range;
range.location = 17;
range.length = 4;
(2)
NSRange range = {17,4};
(3)
NSRange range = NSMakeRange(17,4);
可以在方法调用中传递参数
[anObject
几何数据类型
NSPoint笛卡儿平面中的坐标点(x,y)
typedef struct _NSPoint{
}NSPoint;
快捷函数:NSMakePoint()
NSSize用来存储长度和宽度
typedef
}NSSize;
快捷函数:NSMakeSize()
NSRect矩形数据类型
typedef
}NSRect;
快捷函数:NSMakeRect();
二、字符串NSString类
NSString类,其字符串以@开头,例@”Hello World”
格式化字符串
stringWithFormat方法
+(id) stringWithFormat(NSString *)format,….
最后的….表示这个方法可以接收多个逗号隔开的其他参数
+(id)表示这个方法属于类对象不属于类的实例对象,类方法可以访问全局数据
(-)声明的方法是实例方法,在实例对象中运行
例:NSString *height;
字符串长度
length方法
-(unsigned
例
unsigned int length = [height length];
在表达式中使用
if([height length] > 35){
}
字符串比较方法
isEqualToString方法可以用来比较接收方(接收消息的对象)和当做参数传递来的字符串,返回BOOL值
例:
NSString *thing1 = @”hello”;
NSString *thing2 = @”hello”;
if([thing1 isEqualToString: thing2]){
}
compare方法,将接收对象和传递来的字符串逐个字符进行比较,返回一个NSComparisonResult(枚举型数据),是区分大小写的比较
typedef
} NSComparisonResult;
例:[@”aardvark”
[@”zoinks”
不区分大小写的参数
-(NSComparisonResult)
options参数是一个位掩码,可以使用位或|来添加选项标记
例:
if([thing1 compare :thing2 option : NSCaseInsensitiveSearch | NSNumericSearch] == NSOrderedSame)
{
}
字符串检索
-(BOOL)hasPrefix:(NSString *) aString;
-(BOOL)hasSuffix:(NSString *) aString;
例子:if([filename hasPrefix: @”draft”])
字符串某处包含其他字符串
-(NSRange) rangeOfString : (NSString *)aString;
例:NSRange range = [fileName rangeOfString : @"chapter"];
找到了range.start和length为数字,没找到start为NSNotFound
可变性的字符串
NSMutableString
NSString是不可变的字符串,NSMutableString是NSString的子类可以改变字符串的长度
使用类方法stringWithCapacity创建或stringWithFormat –因为继承的关系NSString中的类也可调用
+(id)stringWithCapacity:(unsigned) capacity;
例:NSMutableString *string;
附加新字符串appendString或appendFormat
-(void) appendString: (NSString *) aString;
-(void) appendFormat: (NSString *) format, ….;
删除字符串中的字符deleteCharactersInRange
例:创建朋友列表
NSMutableString *friends;
三、集合
NSArray不可变数组
NSArray可以存入任意类型的对象,通过索引访问对象
构造方法+(id)arrayWithObjects:object, …. , nil;
结尾处必须加nil已表示赋值结束
例子:
获取数组对象个数
-(unsigned) count;
获取特定索引处的对象
-(id) objectAtIndex: (unsigned int) index;
例子:二者结合用于循环
}
切分数组
-componentsSeparatedByStr
例子:
用componentsJoinedByString
NSMutableArray可变数组
可以任意添加和删除数组中的对象
构造方法:
+(id) arrayWithCapacity : (unsigned) numitems;
例:
NSMutableArray *array;
array = [NSMutableArray
使用addObject在数组末尾添加对象:
-(void) addObject : (id) anObject;
例:
for(i = 0; i < 4 ; i++){
}
使用removeObjectAtIndex删除对象:
-(void) removeObjectAtIndex : (unsigned) index;
例:[array
四、枚举
NSEnumerator使用枚举来迭代运算集合
通过objectEnumerator从前向后遍历集合
通过reverseObjectEnumerator从后向前遍历集合
-(NSEnumerator *) objectEnumerator;
-(NSEnumerator *) reverseObjectEnumerator;
利用while循环向枚举器请求nextObject对象(下一个对象):
-(id) nextObject;
当nextObject返回nil时循环结束
举例代码:
Tip:对可变数组操作时不能通过添加或删除对象来改变数组容器,否则程序会崩溃
快速枚举
在Mac OS X 10.5 Leopard 中添加了此方法,之前版本无法使用
循环会遍历数组中的每个元素,并用指定的变量存储每个数组对象
例:
NSDictionary不可变字典集合
键值对集合,不可变集合,在创建时就要提交全部的对象和关键字
字典集合对于频繁查询和大型数据集来说要比其他数组高效的多,他直接通过键查询而无需遍历集合
构造函数+(id) dictionaryWithObjectsAnd
此方法接受对象和关键字交替存储的序列,以nil值作为终止符,不能在集合中添加nil值
举例代码:
使用方法objectForkey来获取字典中的值,向方法传递对应值的关键字
-(id) objectForKey : (id) akey;
举例代码:
如果没有找到会返回nil值
NSMutableDictionary可变字典集合
构造函数+(Id) dictionaryWithCapacity : (unsigned int) numitems;
长度只是建议无限制
也可使用dictionary
使用setObject : forKey方法给字典添加元素
-(void) setObject : (id) anObject forKey : (id) aKey;
举例代码:
如果已经有了该对象则修改该对象
使用removeObjectForKey方法删除关键字和对象
-(void)removeObjectForKey : (id) akey;
举例代码:
五、各种基本数据类
因为NSArray和NSDictionary只能存储对象,所以Objective-C提供了将基础数据类型封装为对象的类
NSNumber类包装基本数据类型
使用下列类方法创建新的NSNumber对象
+(NSNumber
+(NSNumber
+(NSNumber
+(NSNumber
还有很多其他数据类型的方法,行驶大同小异
调用封装到NSNumber中的数据
-(char) charValue;
-(int) intValue;
-(float)floatValue;
-(BOOL) boolValue;
-(NSString
etc
Tip:高精度数据可以被低精度数据提取方法提取出来,NSNumber会对数据进行适当转换
NSValue可以包含任何值
NSValue是NSNumber的超类
NSValue可以放入NSArray和NSDictionary中
构造函数:+(NSValue
举例代码:
使用方法getValue来提取数值:需提供数值变量的地址,即&对象名
-(void) getValue : (void *) value;
举例代码:
Tip:还记得吗,get开头的方法返回的是一个指针
Cocoa提供了将常用struct型数据转换为NSValue的方法:
+(NSValue
+(NSValue
+(NSValue
-(NSPoint) pointValue;
-(NSSize) sizeValue;
-(NSRect) rectValue;
举例代码:在NSArray中存储和检索NSRect
NSNull空值对象
因为nil在集合中有特殊含义所以创造出来这个类来代替nil
获得一个NSNull空值方法+(NSNull
举例代码:
(1)判断是否为空
(2)将空添加到集合中