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]] 添加对象

不可变数组对象:
[array count] : 得到这个对象数组的长度。
[array objectAtIndex 0]: 传入数组脚标的id 得到数据对象。
[arrayWithObjects: ...] :向数组对象初始化赋值。这里可以写任意对象的指针,结尾必须使用nil。

NSArray 不可变数组 常用方法+(id)arrayWithObjects:obj1,obj2,...nil创建一个新的数组,obj1,obj2......是他的元素对象,以nil对象结尾-(BOOL)containsObject:obj确定数组中是否包含对象obj-(NSUInteger)count返回数组元素个数-(NSUInteger)indexOfObject:obj第一个包含obj元素的索引号-(id)objectAtIndex;i返回存储在位置 i 的对象-(void)makeObjectsPerformSelector:(SEL)selector将 selector 只是的消息发送给数组中的每个元素-(NSArray*)sortedArrayUsingSelector:(SEL)selector根据selector 指示的比较方法对数组进行排序-(BOOL)writeToFile:path atomically:(BOOL)flag将数组写入指定的文件中,如果 flag 为 YES,则需要先创建一个临时文件








可变数组对象:
[NSMutableArray arrayWithCapacity:10] :初始化可变数组对象的长度,如果后面代码继续添加数组超过长度10以后NSMutableArray的长度会自动扩充,所以不用担心数组越界。
[array addObject:...] : 向可变数组尾部添加数据对象。
[array addObjectsFromArray:..] :向可变数组尾部添加一个数组对象。


NSMutableArray 常用方法总结array创建一个空数组+(id)arrayWithCapacity:size创建一个数组,指定容量为size-(id)initWithCapacity:size初始化一个新分配的数组,指定容量为size-(void)addObject:obj将对象obj添加到数组末尾-(void)insertObject:obj atIndex:i将对象 obj 插入到索引为 i 的位置-(void)replaceObject:obj atIndex:i将数组中索引为 i 处的元素用obj 置换-(void)removeObject:obj从数组中删除所有是 obj 的对象-(void)removeObjectAtIndex:i从数组中删除索引为 i 的对像-(void)sortUsingSelector:(SEL)selector用 selector 只是的比较方法将数组排序


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的数字的集合。集合对象的操作包括搜索、添加、删除集合中的成员(可变集合的功能),比较两个集合,计算两个集合的交集和并集等。

NSSet 常用方法总结+(id)setWithObjects:obj1,obj2,...nil使用一组对象创建新的集合-(id)initWithObjects:obj1,obj2,....nil使用一组对象初始化新分配的集合-(NSUInteger)count返回集合成员个数-(BOOL)containsObject:obj确定集合是否包含对象 obj-(BOOL)member:obj确定集合是否包含对象 obj-(NSEnumerator*)objectEnumerator 返回集合中所有对象到一个 NSEnumerator 类型的对象-(BOOL)isSubsetOfSet:nsset判断集合是否是 nsset 的子集-(BOOL)intersectsSet:nsset判断两个集合的交集是否至少存在一个元素-(BOOL)isEqualToSet:nsset判断两个集合是否相等








NSMutableSet 常用方法总结-(id)setWithCapcity:size创建一个有size大小的新集合-(id)initWithCapcity:size初始化一个新分配的集合,大小为size-(void)addObject:obj添加对象 obj 到集合中-(void)removeobject:obj从集合中删除对象 obj-(void)removeAllObjects删除集合中所有对象-(void)unionSet:nsset将nsset的所有元素添加到集合-(void)minusSet:nsset从集合中去掉所有的nsset 的元素-(void)interectSet:nsset集合和nsset 做交集运算





原创粉丝点击