ObjC学习9-Foundation框架之数字、字符串和集合

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 做交集运算






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值