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]] 添加对象
+(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:..] :向可变数组尾部添加一个数组对象。
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的数字的集合。集合对象的操作包括搜索、添加、删除集合中的成员(可变集合的功能),比较两个集合,计算两个集合的交集和并集等。
+(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 | 判断两个集合是否相等 |
-(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 做交集运算 |
+(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:..] :向可变数组尾部添加一个数组对象。
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 只是的比较方法将数组排序 |
+(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,则需要先创建一个临时文件 |
集合 NSSet 对象是一组单值对象的组合,比如,1个包含1到50的数字的集合。集合对象的操作包括搜索、添加、删除集合中的成员(可变集合的功能),比较两个集合,计算两个集合的交集和并集等。
+(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 | 判断两个集合是否相等 |
-(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 做交集运算 |