ObjC学习9-Foundation框架之数字、字符串和集合
来源:互联网 发布:游戏优化器 编辑:程序博客网 时间:2024/05/01 01:23
1.数字对象
NSNumber
下表列出了为NSNumber对象设置值的类和实例方法,以及检索这些值的相应实例方法。
创建和初始化类的方法 初始化实例方法 检索实例方法 numberWithChar: initWithChar: charValue numberWithUnsignedChar: initWithUnsignedChar: unsignedCharValue numberWithShort: initWithShort: shortValue numberWithUnsignedShort: initWithUnsignedShort: unsignedShortValue numberWithInteger: initWithInteger: integerValue numberWithUnsignedInteger: initWithUnsignedInteger: unsignedIntegerValue numberWithInt: initWithInt: intValueunsigned numberWithUnsignedInt: initWithUnsignedInt: unsignedIntValue numberWithLong: initWithLong: longValue numberWithUnsignedLong: initWithUnsignedLong: unsignedLongValue numberWithLongLong: initWithLongLong: longlongValue numberWithUnsignedLongLong: initWithUnsignedLongLong: unsignedLongLongValue numberWithFloat: initWithFloat: floatValue numberWithDouble: initWithDouble: doubleValue numberWithBool: initWithBool: boolValue代码实例:
#import <Foundation/NSObject.h>
#import <Foundation/NSValue.h>
#import <Foundation/NSString.h>
#import <Foundation/NSAutoreleasePool.h>
----------------------------------------------
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; NSNumber *myNumber,*floatNumber,*intNumber; NSInteger myInt; //integer value intNumber=[NSNumber numberWithInteger:100]; myInt = [intNumber integerValue]; NSLog (@"%li",(long)myInt); //long value myNumber = [NSNumber numberWithLong:0xabcdef]; NSLog(@"%lx",[myNumber longValue]); //char value myNumber = [NSNumber numberWithChar:'x']; NSLog(@"%c",[myNumber charValue]); //float value floatNumber = [NSNumber numberWithFloat:100.00]; NSLog (@"%g",[floatNumber floatValue]); //double myNumber = [NSNumber numberWithDouble:12345e+15]; NSLog(@"%lg",[myNumber doubleValue]); //Wrong access here NSLog(@"%i",[myNumber integerValue]); //Test two Numbers for equality if([intNumber isEqualToNumber:floatNumber]==YES) { NSLog(@"Number are equal"); } else{ NSLog(@"Number are not equal"); } //Test if one Number is <,==,or>second Number if([intNumber compare:myNumber]==NSOrderedAscending) { NSLog(@"Frist number is less than second"); } //NSNumber使用时 必须引用NSValue.h [pool drain];
结果:
再回到代码,该程序接下来使用类方法创建了long,char,float和double NSNumber对象。注意,使用程序行
myNumber = [NSNumber numberWithDouble: 12345e+15];
创建double对象后将出现什么情况?然后尝试(不正确地)使用如下程序行来检索并显示它的值:
NSLog (@"%i", [myNumber integerValue]);
将得到以下输出:
0
并且,系统也没有给出出错消息。一般来说,你负责确保正确地进行检索,如果在NSNumber对象中存储了一个值,那么也要用一致的方式进行检索。
在if语句中,消息表达式
[intNumber isEqualToNumber: floatNumber]
使用isEqualToNumber:方法根据数值比较两个NSNumber对象。该程序测试返回的Boolean值,以查看这两个值是否相等。
可用compare:方法来测试一个数值型的值是否在数值上小于、等于或大于另一个值。消息表达式
[intNumber compare: myNumber]
在intNumber中的值小于myNumber中的值时,返回值NSOrderedAscending;如果这两个数相等,则返回值NSOrderedSame;如果第一个值大于第二个值,则返回值NSOrderedDescending。在头文件NSObject.h中已经定义了这些返回值。
应该注意不能重新初始化前面创建的NSNumber对象的值。例如,不能使用下面的语句设置存储在NSNumber对象myNumber中的整数:
[myNumber initWithInt: 1000];
当程序执行时,这条语句将产生一条错误。所有数字对象都必须是新创建的,这意味着必须对NSNumber类调用上表第一列列出一个方法,或者对alloc方法的结果调用第二列列出的方法中,如下所示:
myNumber = [[NSNumber alloc] initWithInt: 1000];
当然,基于前面的讨论,如果使用这种方式创建myNumber,则在使用完之后,你需要使用以下语句来释放它:
[myNumber release];
好了,到这里,Foundation框架中的NSNumber对象就介绍完了。
2.字符串对象
NSString
#import <Foundation/NSString.h>
---------------
NSString *str = @"coding 2013-05-27 1326"; NSLog(@"%@",str);
结果:
NSLog(@"%@") 中%@可以显示很多东西包括NSNumber对象 也可以用%@直接显示。
事实上数组,集合等也可以输出出来,不过需要去重载它的方法不然只是输出内存地址。好比C#里面的ToString()
NSString *str1 = @"This is string A"; NSString *str2 = @"This is string B"; NSString *res ; NSComparisonResult compareResult;//NSString实际上是一个不可变的对象,要对它进行操作可以建一个NSComparisonResult,类似其他语言的StringBuilder~ NSLog(@"Length str1 : %lu",[str1 length]); res = [NSString stringWithString:str1]; NSLog(@"copying : %@",res); str2 = [str1 stringByAppendingString:str2]; NSLog(@"str2Append : %i",str2); if([str1 isEqualToString:res]==YES) { NSLog(@"str1==res"); } else { NSLog(@"str1!=res"); } compareResult = [str1 compare:str2]; if(compareResult==NSOrderedAscending) { NSLog(@"str1<str2"); }else if(compareResult==NSOrderedSame) { NSLog(@"str1==str2"); }else{ NSLog(@"str1>str2"); } res =[str1 uppercaseString]; NSLog(@"%s",[res UTF8String]); res =[str1 lowercaseString]; NSLog(@"%s",[res UTF8String]);//不用UTF8输出会乱码
结果:
还可以用NSRange 来创建范围指定:NSRange subRange
subRange=[str1 rangeOfString:@"ssss"];//检索是否存在ssss
用NSMutableString来接收插入删除替换的字符串
NSMutableString *mstr;
[mstr insertString:@"insert " atIndex:7];//在索引7插入字符串
[mstr deleteCharactersInRange:NSMakeRange(15,3)];//从15字符起删除3个字符
[mstr replaceCharactersInRange:NSMakeRange(15,3) withString :@"replace"];//在NSRange范围下替换
-----------常见的NSString方法 NSMutableString方法-------------
NSString方法
+(id) stringWithContentsOfFile:path encoding:enc error:err
创建一个新字符串并将其设置为path指定的文件的内容,使用字符编码enc,如果非零,则返回err中错误
+(id) stringWithContentsOfURL:url encoding:enc error:err
创建一个新的字符串,并将其设置为url的内容,使用字符编码enc,如果非零,则返回err中的错误
+(id) string
创建一个新的空字符串
+(id) stringWithString:nsstring
创建一个新的字符串,并将其设置为nsstring
-(id)initWithString:nsstring
将分配的字符串设置为nsstring
-(id) initWithContentsOfFile:path encoding:enc error:err
将字符串设置为path制定的文件的内容
-(id) initWithContentsOfURL:url encoding:enc error:err
将字符串设置为url(NSURL *)url的内容,使用字符编码enc,如果非零,则返回err中的错误
-(id) (UNSIgned int)length
返回字符串中的字符数目
-(unichar)characterAtIndex:i
返回索引i的Unicode字符
-(NSString *)substringFromIndex:i
返回从i开始知道结尾的子字符串
-(NSString *)substringWithRange:range
根据指定范围返回子字符串
-(NSString *)substringToIndex:i
返回从该字符串开始到索i的子字符串
-(NSComparator *)caseInsensitiveCompare:nsstring
比较两个字符串,忽略大小写
-(NSComparator *)compare:nsstring
比较两个字符串
-(BOOL)hasPrefix:nsstring
测试字符串是否以nsstring开始
-(BOOL)hasSuffix:nsstring
测试字符串是否以nsstrng结尾
-(BOOL)isEqualToString:nsstring
测试两个字符串是否相等
-(NSString *) capitalizedString
返回每个单词首字母大写的字符串(每个单词的其余字母转换为小写)
-(NSString *)lowercaseString
返回转换为小写的字符串
-(NSString *)uppercaseString
返回转换为大写的字符串
-(const char*)UTF8String
返回转换为UIF-8字符串的字符串
-(double)doubleValue
返回转换为double的字符串
-(float)floatValue
返回转换为浮点值的字符串
-(NSInteger)integerValue
返回转换为NSInteger整数的字符串
-(int)intValue
返回转换为整数的字符串
NSMutableString方法
+(id) stringWithCapacity:size
创建一个字符串,初始包含size的字符
-(id) initWithCapacity:size
使用初始容量为size的字符串来初始化字符串
-(void) setString:nsstring
将字符串设置为nsstring
-(void) appendString:nsstring
在接收者的末尾附加nsstring
-(void) deleteCharactersInRange:range
删除指定range中的字符
-(void) insertString:nsstring atIndex:i
以索引i为起始位置插入nsstring
-(void) replaceCharactersInRange:range withString:nsstring
使用nsstring替换range指定的字符
-(void) replaceOccurrencesOf
String:nsstring withString:nsstring2 options:opts range:range
根 据选项opts。使用指定range中的nsstring2替换所有的nsstring。选项可以包括NSBackwardsSearch(从范围的结尾 开始搜索)NSAnchoredSearch(nsstring必须匹配范围的开始),NSLiteralSearch(执行逐字节比较以及 NSCaceInsensitiveSearch的按位或组合)
*----------------在串中搜索子串----------------*/
NSString *string1 = @"This is a string";
NSString *string2 = @"string";
NSRange range = [string1 rangeOfString:string2];
int location = range.location;
int leight = range.length;
NSString *astring = [[NSString alloc] initWithString:[NSString stringWithFormat:@"Location:%i,Leight:%i",location,leight]];
NSLog(@"astring:%@",astring);
[astring release];
/*----------------抽取子串 ----------------*/
//-substringToIndex: 从字符串的开头一直截取到指定的位置,但不包括该位置的字符
NSString *string1 = @"This is a string";
NSString *string2 = [string1 substringToIndex:3];
NSLog(@"string2:%@",string2);
//-substringFromIndex: 以指定位置开始(包括指定位置的字符),并包括之后的全部字符
NSString *string1 = @"This is a string";
NSString *string2 = [string1 substringFromIndex:3];
NSLog(@"string2:%@",string2);
//-substringWithRange: //按照所给出的位置,长度,任意地从字符串中截取子串
NSString *string1 = @"This is a string";
NSString *string2 = [string1 substringWithRange:NSMakeRange(0, 4)];
NSLog(@"string2:%@",string2);
3.数组对象
Foundation数组是有序的对象集合,不可变数组是有NSArray类处理,可变数组是有NSMutableArray处理,后者是前者的子类,要使用对象数组需引用 <Foundation/NSArray.h>
NSArray *arr = [NSArray arrayWithObjects:@"a",@"b",@"c",nil];//最后一个必须是nil,类似'\0'~
for(int i = 0;i<3;++i)
{
NSLog(@"%i %@",i+1,[arr objectAtIndex:i]);
}
可使用[arr addObject:[NSNumber numberWithInteger:3]] 添加对象
[NSMutableArray arrayWithCapacity:10] :初始化可变数组对象的长度,如果后面代码继续添加数组超过长度10以后NSMutableArray的长度会自动扩充,所以不用担心数组越界。
[array addObject:...] : 向可变数组尾部添加数据对象。
[array addObjectsFromArray:..] :向可变数组尾部添加一个数组对象。
4.字典对象
K-V 需引入<Foundation/NSDictionary.h>
初始化:
NSMutableDictionary *d = [NSMutableDictionary dictionary];
[d setObject:@"a" forKey:@"a1"];
或
NSDictionary *d = [NSDictionary dictionaryWithObjectsAndKeys:@"a",@"a1",@"b",@"b1",nil];
for(NSString *key in d)
{
NSLog(@"%@ %@",key , [d objectForKey:key]);
}
NSDictionary常用方法:
+(id)dictionaryWithObjectsAndKeys:obj1,obj2,...nil //顺序增加对象和键值来创建一个字典。-(id)initWithObjectsAndKeys:obj1,key1,obj2,key2,...nil //初始化一个新分配的字典,顺序增加对象和值-(unsigned int)count //返回字典中记录数-(NSEnumerator*)keyEnumerator //返回字典中所有的键到一个NSEnumerator对象-(NSArray*)keysSortedByValueUsingSelector:(SEL)selector //用Selector指定的方法时行排序-(NSEnumerator*)objectEnumerator //返回字典中的值到一个NSEnumerator类型对象-(id)objectForKey:key //返回指定key的值
NSMutableDictionary常用方法:
+(id)dictionaryWithCapacity:size //创建一个size大小的可变字典-(id)initWithCapacity:size //初始化一个size大小的可变字典-(void)removeAllObjects //删除字典中所有元素-(void)removeObjectForKey:key //删除字典key位置的元素-(void)setObject:obj forKey:key //增加(obj,key)到字典中,若key已经存在,则替换值为objNSMutableDictionary常用方法:
5.集合对象
#import <Foundation/NSSet.h>
集合 NSSet 对象是一组单值对象的组合,比如,1个包含1到50的数字的集合。集合对象的操作包括搜索、添加、删除集合中的成员(可变集合的功能),比较两个集合,计算两个集合的交集和并集等。
- ObjC学习9-Foundation框架之数字、字符串和集合
- ObjC学习9-Foundation框架之操作文件
- IOS学习之Foundation框架—集合
- Foundation框架之 NSString 和 集合
- IOS学习之Foundation框架—字符串
- object-c Foundation和数字、字符串、集合 第九天
- Foundation框架学习1--NSNumber和字符串
- Foundation框架之字符串和日期
- 黑马程序员——Foundation框架之结构体、字符串和集合
- 黑马程序员——Foundation框架:字符串之集合类
- Foundation框架学习之NSString和NSMutableString
- Foundation框架学习之NSArray和NSMutableArray
- Foundation框架学习之NSDictionary和NSMutableDictionary
- ObjC学习8-重头戏来了!Foundation框架
- ObjC学习10-Foundation框架之内存管理
- Foundation框架之字符串对象
- Objective-C Foundation框架 字符串、集合
- oc学习之Foundation框架--字符串
- 有关Dynamic Web TWAIN的一些问题
- c++基础---C++之模板
- Python扩展方法及工具比较
- 交换数据流(ADS)与IIS的前世与今生
- 纹理(讲得比较详细的文章)
- ObjC学习9-Foundation框架之数字、字符串和集合
- Loadrunner windows sockets性能测试脚本开发视频完成
- 二分匹配
- HTML和XHTML
- Ruby简介 完全面对象 脚本 从人的角度编程(强大反射)
- 设置MSQL自增
- NTFS中的streams和ADS
- Eclipse下搭建struts、spring、hibernate开发环境 搭建环境
- 线程和进程的通讯方式