首页 > 代码库 > Objective-C语言Foundation框架

Objective-C语言Foundation框架

Mac OS X开发会使用Cocoa框架,它是一种支持应用程序提供丰富用户体验的框架,它实际上由:Foundation和Application Kit(AppKit)框架组成。iOS开发,会使用Cocoa Touch框架,它实际上由:Foundation和UIKit框架组成。

• AppKit和UIKit框架都是与窗口、按钮、列表等相关的类。Foundation是Mac OS X和iOS应用程序开发的基础框架,它包括了一些基本的类,如:数字、字符串、数组、字典等。

• 基本数据类型,int、char、float和double都不是类,不具有方法、成员变量和属性,以及面向对象的特征。为了实现“一切都是对象”的承诺,因此在Foundation框架中使用NSNumber类来封装这些数字类型。这样数字就具有了面向对象的基本特征了。

采用+ numberWithInt:等“+ number”开头的类级构造方法,可以从基本数据类型构建NSNumber对象。而使用–intValue方法可以从NSNumber对象获得基本数据类型。

NSNumber *intNumber= [NSNumber numberWithInteger:80];NSNumber *floatNumber = [NSNumber numberWithFloat:80.00];int myint = [intNumber intValue];float myfloat = [floatNumber floatValue];

 

可以转化成为基本数据类型比较,当然可以使用NSNumber的方法比较,这就是对象的优势了,与比较相关方法有:isEqualToNumber:和compare:。isEqualToNumber:只是比较是否相对,compare:可以比较大小。

if ([intNumber isEqualToNumber: floatNumber] == YES) {NSLog(@"相等");} else {NSLog(@"不相等");}if ([intNumber compare: myNumber] ==NSOrderedAscending) {NSLog(@"第一个数小于第二个数");}

NSOrderedAscending是枚举类型NSComparisonResult的其中成员,代表第一个数小于第二个数,此外还有NSOrderedSame成员代表第一个数等于第二个数,NSOrderedDescending成员代表第一个数大于第二个数。

在Foundation框架中字符串类有两种:NSString不可变字符串类和NSMutableString可变字符串类。NSString是定义固定大小的字符串,NSMutableString是可对字符串做追加、删除、修改、插入和拼接等操作而不会产生新的对象。

 

stringWithString:,类级构造方法创建NSString对象,NSString构造方法还有很多;

length,返回Unicode字符的长度;

stringByAppendingString:实现了字符串的拼接,这个方法会产生下一新的对象;

isEqualToString:,比较两个字符串是否相等;
compare: 比较两个字符串大小;
substringToIndex:,可以获得字符串的前x个字符串;
substringFromIndex:,可以截取x索引位置到尾部字符串;
rangeOfString:, 字符串查找;

#import <Foundation/Foundation.h>int main (int argc, const char * argv[]) {NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];NSString *str1 = @"aBcDeFgHiJk";NSString *str2 = @"12345";NSString *res;NSComparisonResult compareResult;NSRange subRange;//字符个数NSLog(@"字符串str1长度: %i",[str1 length]);//拷贝字符串到resres = [NSString stringWithString: str1];NSLog(@"拷贝: %@", res);//拷贝字符串到str1尾部str2 = [str1 stringByAppendingString: str2];NSLog(@"连接字符串: %@", 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(@"大写字符串:%@", res);res = [str1 lowercaseString];NSLog(@"小写字符串:%@", res);NSLog(@"原始字符串: %@", str1);//获得前三个数res = [str1 substringToIndex: 3];NSLog(@"字符串str1的前三个字符: %@",res);res = [str1 substringFromIndex: 4];NSLog(@"截取字符串,从第索引4到尾部: %@",res);res = [[str1 substringFromIndex: 3] substringToIndex: 2];NSLog(@"截取字符串,从第索引3到5: %@",res);//字符串查找subRange = [str2 rangeOfString: @"34"];if (subRange.location == NSNotFound) {NSLog(@"字符串没有找到");} else {NSLog (@"找到的字符串索引 %i 长度是 %i",subRange.location, subRange.length);}[pool drain];return 0;}

• 我们解释一下主要代码,str2 = [str1stringByAppendingString: str2]语句是将两个字符串对象拼接在一起,由于NSString是不可变字符串类,这会产生一个新的对象。subRange = [str2 rangeOfString: @"34"]中的rangeOfString:方法会返回一个NSRange结构体,它的location成员是找到的字符串的索引,它的length成员是找到的字符串的长度。

 

• stringWithString:,类级构造方法创建NSString对象,NSMutableString构造方法还有很多;

• insertString:,插入字符串,不会创建新的对象;

• appendString:,追加字符串,不会创建新的对象;

• deleteCharactersInRange:在一个范围内删除字符串,不会创建新的对象;

• replaceCharactersInRange: withString:替换字符串,不会创建新的对象;

 

#import <Foundation/Foundation.h>int main (int argc, const char * argv[]) {NSAutoreleasePool * pool = [[NSAutoreleasePool alloc]init];NSString *str1 = @"Objective C";NSString *search,*replace;NSMutableString *mstr;NSRange substr;//从不可变的字符创建可变字符串对象mstr = [NSMutableString stringWithString: str1];NSLog(@" %@", mstr);//插入字符串[mstr insertString: @ " Java" atIndex: 9];NSLog(@" %@", mstr);//具有连接效果的插入字符串[mstr insertString: @ " and C++"atIndex: [mstr length]];NSLog(@" %@", mstr);//字符串连接方法[mstr appendString: @ " and C"];NSLog(@" %@", mstr);//使用NSRange删除字符串[mstr deleteCharactersInRange:NSMakeRange(16, 13)];NSLog(@" %@", mstr);//查找字符串位置substr = [mstr rangeOfString: @ "string B and"];if (substr.location != NSNotFound) {[mstr deleteCharactersInRange: substr];NSLog(@" %@", mstr);}//直接设置可变字符串[mstr setString: @ "This is string A "];NSLog(@" %@", mstr);[mstr replaceCharactersInRange: NSMakeRange(8, 8)withString: @ "a mutable string "];NSLog(@" %@", mstr);//查找和替换search = @"This is ";replace = @"An example of ";substr = [mstr rangeOfString:search];if (substr.location != NSNotFound) {[mstr replaceCharactersInRange:substr withString: replace];NSLog(@" %@", mstr);}//查找和替换所有的情况search = @"a";replace = @"X";substr = [mstr rangeOfString: search];while (substr.location != NSNotFound) {[mstr replaceCharactersInRange:substr withString: replace];substr = [mstr rangeOfString: search];}NSLog(@" %@", mstr);[pool drain];return 0;}

• 我们解释一下主要代码,语句[mstrdeleteCharactersInRange:NSMakeRange(16, 13)]是删除指定范围的字符串,函数NSMakeRange 是创建NSRange结构体,其中第一个参数是位置,第二个参数是长度,语句[mstrreplaceCharactersInRange: NSMakeRange(8, 8)withString:@ “a mutable string ”]替换指定访问的字符串。[mstrdeleteCharactersInRange: substr]语句是删除指定范围的字符串。

 

在Foundation框架中数组被封装成为类,数组有两种:NSArray不可变数组类和NSMutableArray可变数组类。

NSArray有很多方法,下面是总结常用的方法:

  • count,返回当前数组的长度;
  • objectAtIndex:,按照索引返回数组中的元素;
  • containsObject:是否包含某一元素;
  • arrayWithObjects: 类级构造方法;
  • initWithObjects: 实例构造方法;
#import <Foundation/Foundation.h>int main (int argc, const char * argv[]) {NSAutoreleasePool * pool = [[NSAutoreleasePool alloc]init];NSArray *weeksNames = [NSArray arrayWithObjects:@"星期一",@"星期二",@"星期三",@"星期四”,@"星期五",@"星期六",@"星期日",nil];NSLog(@"星期名字");NSLog(@"==== ====");int i;for (i=0; i < [weeksNames count];i++) {NSLog(@"%2i %@ ", i+1,[weeksNames objectAtIndex: i]);}[pool drain];return 0;}

arrayWithObjects可以用来创建使用一列对象作为元素的数组。在这种情况下,按顺序列出对象并使用逗号隔开。使用这个方法必须在列表的最后指定一个结束标志nil。count可以获得数组的长度。数组的下标是从0开始的。

NSMutableArray是NSArray的子类,NSMutableArray有很多方法,下面是总结常用的方法:

  • addObject:,在数组的尾部追加一个元素;
  • insertObject:,在数组的添加一个元素;
  • atIndex:按照索引插入一个元素;
  • removeObjectAtIndex:移除特定索引的元素;
  • removeObject: 移除特定元素;
  • initWithCapacity: 实例构造方法;
#import <Foundation/Foundation.h>int main (int argc, const char * argv[]) {NSMutableArray *weeksNames = [[NSMutableArray alloc]initWithCapacity: 3];[weeksNames addObject: @"星期一"];[weeksNames addObject: @"星期二"];[weeksNames addObject: @"星期三"];[weeksNames addObject: @"星期四"];[weeksNames addObject: @"星期五"];[weeksNames addObject: @"星期六"];[weeksNames addObject: @"星期日"];NSLog(@"星期名字");NSLog(@"==== ====");int i;for (i=0; i < [weeksNames count];i++)NSLog(@"%2i %@ ", i+1,[weeksNames objectAtIndex: i]);[weeksNames release];return 0;}

[[NSMutableArray alloc] initWithCapacity: 3],可以初始化可变数组并分配3个初始单元,如果超过了容量会自动追加的。addObject方法可以向数组中添加元素。

 

字典集合,它是由“键-值”对构成的集合。键集合不能重复,值集合没有特殊要求。键和值集合中的元素可以是任何对象,但是不能是nil。字典类数据结构模型,如

图所示的“学生与学号”集合,与数组类一样,字典类也分为NSDictionary不可变字典和NSMutableDictionary可变字典。

技术分享

 

NSDictionary有很多方法,下面是总结常用的方法:

  • count,字典集合的长度;
  • objectForKey:,通过键获得值对象;
  • allKeys,返回所有键集合;
  • arrayWithObjects:类级构造方法;
  • initWithObjects: 实例构造方法;
  • initWithObjects:forKeys:,实例构造方法;
  • initWithObjectsAndKeys:,实例构造方法;
  • initWithContentsOfFile:,从属性文件中创建对象;
#import <Foundation/Foundation.h>int main (int argc, const char * argv[]) {NSAutoreleasePool * pool = [[NSAutoreleasePool alloc]init];NSArray * keys = [@"one two three four five"componentsSeparatedByString:@" "];NSArray * values = [@"alpha bravo charlie delta echo"componentsSeparatedByString:@" "];NSDictionary * dict = [[NSDictionary alloc]initWithObjects:values forKeys:keys];NSLog(@"%@", [dict description]);[dict release];[pool drain];return 0;}

NSArray * keys = [@“one two three four five”componentsSeparatedByString:@“ ”]语句是将一个字符串按照空格分割返回NSArray对象,同理获得values对象,然后使用NSDictionary * dict = [[NSDictionary alloc]initWithObjects:values forKeys:keys]语句把keys和values放入到不可变字典对象dict中。

 

NSMutableDictionary 是NSDictionary的子类,NSMutableDictionary有很多方法,下面是总结常用的方法:

  • setObject: forKey:,通过键和值;
  • removeObjectForKey:,按照键移除值;
  • writeToFile: atomically:,把对象写入到文件中;
#import <Foundation/Foundation.h>int main (int argc, const char * argv[]) {NSAutoreleasePool * pool = [[NSAutoreleasePool alloc]init];NSMutableDictionary *mutable = [[NSMutableDictionaryalloc] init];// add objects[mutable setObject: @"Tom" forKey: @"tom@jones.com"];[mutable setObject: @"Bob" forKey: @"bob@dole.com" ];NSLog(@"%@", [mutable description]);[mutable release];[pool drain];return 0;}

NSMutableDictionary *mutable = [[NSMutableDictionaryalloc] init]是采用默认的init构造方法创建NSMutableDictionary对象mutable。[mutable setObject:@"Tom" forKey: @"tom@jones.com"]语句是按照键tom@jones.com添加Tom对象。

 

Objective-C语言Foundation框架