1、Foundation框架核心内容Foundation框架数字对象常用处理方法字符串对象常用处理方法数组对象常用处理方法字典和集合对象常用处理方法约定速成的命名规则类名首字母大写变量名和方法名首字母小写使用驼峰标志1 认识Foundation框架 框架是有许多类、方法、函数以及文档按照一定的规则组织起来的集合,以便于程序员更加方便、迅速的开发程序。cocoa程序编写主要用到2个框架Foundation和ApplicationKit(UIKit)。其中Foundation框架主要定义了一些基础类,供程序员来使用,而Application Kit主要是一些用户界面设计的类,用于Mac开发使用此库。F
2、oundation框架中的所有类都继承自NSObject这个对象。作为通用的面向对象的函数库,Foundation提供了字符串,数值的管理,容器及其枚举,以及一些其他的与图像用户界面没有直接关系的功能。其中用于类和常数的“NS”前缀来自于Cocoa的来源,NextSTEP。它可以在Mac OX X和iOS中使用。2、数字对象的常用处理方法在之前的学习中,我们已经学习了基本数据类型。但这些都是基本数据类型,它们不是对象,因此,不能向它们发送消息。然而有时也需要将他们当做对象来处理。比如,我们需要把基本类型放入集合中(在cocoa中集合只能存放对象,无法存放基本数据类型),那么这时我们需要将基本类
3、型转换为数字对象。OC中提供了数字对象“NSNumber”可以将基本数据类型“包装”成对象,这样我们就可以将数据类型来处理了。数字对象的初始化/类方法创建数字对象int number=10;NSNumber*intNumber=NSNumber numberWithInt:number;BOOL isBool=YES;NSNumber*boolNumber=NSNumber numberWithBool:isBool;数字对象创建与转换数字对象的转化/实例方法创建数字对象float pi=3.14;NSNumber*piNumber=NSNumber alloc initWithFloat:p
4、i;char character=a;NSNumber*cNumber=NSNumber alloc initWithChar:character;/还原成基本数据类型int month=intNumber intValue;BOOL isOpen=boolNumber boolValue;float length=piNumber floatValue;char firstName=cNumber charValue;(看代码FoundationDemo1)3、字符串的基本概念和常用处理方法在Foundation框架中,提供了NSString类,用于处理字符串对象。在C语言中字符串在一对引号
5、中表示。OC是C语言的一种延展,换句话说,OC语言是建立在C语言的基础上的(C的基础上添加了面向对象的内容,smalltalk语言)。因此,为了区别两者的字符串,OC语言的字符串必须以开头,引号当中则是字符串的内容,如“abc”。此外,NSString对象,一旦被创建,就不可以更改。如若需要一个可以更改的字符串对象,需要创建NSMutableString实例。字符串对象的创建字符串的创建 创建一个字符串 创建一个空的字符串 快速创建一个字符串NSString*string=这是一个字符串常量;NSString*string1=NSString alloc init;NSString*strin
6、g2=NSString string;NSString*string=NSString alloc initWithString:快速创建字符串;NSString*string=NSString stringWithString:快速创建一个字符串;比较字符串对象int number=2;NSString*string=NSString alloc initWithFormat:%d,numnber;快速创建一个格式化字符串float number=2.4;NSString*string=NSString stringWithFormat:浮点数%f,number;比较字符串 测试字符串内容是
7、否相同NSString*string1=NSString alloc initWithFormat:test;NSString*string2=NSString alloc initWithFormat:test;if(string1 isEqualToString:string2)NSLog(测试连个字符串是否相等);比较字符串对象测试字符串是否为同一个对象比较字符串的大小求字符串的长度NSString*string1=NSString alloc initWithFormat:test;NSString*string2=NSString alloc initWithFormat:test;
8、if(string1=string2)NSLog(测试两个字符串是否为同一个对象);NSString*string1=NSString alloc initWithFormat:a;NSString*string2=NSString alloc initWithFormat:b;NSLog(string1 caseInsensitiveCompare:string2:%ld,string1 caseInsensitiveCompare:string2);字符串对象的转换NSString*string1=NSString alloc initWithFormat:string length;NS
9、UInteger*length=string1 length;字符串的转换 改变字符串大小写NSString*hello=hello WORLD;NSLog(“%”,hello uppercaseString);/全部大写NSLog(%,hello lowercaseString);/全部小写NSLog(%,hello capitalizedString);/首字母大写,其他字母小写 将字符串转换成基本数据类型NSString*string=2.467;NSLog(%d,string boolValue);/转换成BOOL类型NSLog(%f,string floatValue);/转换成浮点
10、型NSLog(%f,string doubleValue);/转换成双精度型NSLog(%d,string intValue);/转换成整型截取字符串对象NSString*string=One Two Three Four;NSArray*array=string componentsSeparatedByString:;将字符串转换为数组字符串的截取与拼接 截取字符串NSString*string=NSString alloc initWithFormat:abcdef;/从字符串的开头一直截取到指定的位置,但不包括该位置的字符NSString*string1=string substrin
11、gToIndex:2;/以指定位置开始(包括指定位置的字符),并包括之后的全部字符NSString*string2=string substringFromIndex:2;拼接字符串对象 截取字符串NSRange rang;rang.location=2;rang.length=2;NSString*string3=string substringWithRange:rang;NSString*str1=1,*str2=2;NSString*string=NSString alloc initWithFormat:这时拼接:%and%,str1,str2;NSString*string1=st
12、r1 stringByAppendingFormat:%,str2;NSString*string2=str1 stringByAppendingString:str2;查询字符串查询字符串对象NSString*link=asdastarget=_blankddasd;NSRange range=link rangeOfString:target=_blank;if(range.location!=NSNotFound)NSLog(string 找到了);可变字符串对象l 可变字符串-NSMutableString,它继承自NSString 插入字符串 删除字符串 替换字符串NSMutable
13、String*str=NSMutableString stringWithString:字符串;str insertString:可变 atIndex:0;NSMutableString*str=NSMutableString stringWithString:字符串;str deleteCharactersInRange:NSMakeRange(1,2);NSMutableString*str=NSMutableString stringWithString:字符串;str replaceCharactersInRange:NSMakeRange(0,2)withString:羊肉;4、集合
14、-数组的概念和常用方法l 数组的基本概念 Foundation中的数组(NSArray,NSMutableArray)是一组有序的对象集合,通过索引下标取到数组中的各个元素。与字符串相同,数组也有可变和不可变数组之分。此外,数组中不可以存放基本数据类型,只能存放类的实例(对象)。如若需要将基本数据类型、结构体放入数组中,需要通过NSNumber、NSValue进行数据的“封装”;l 不可变数组-NSArray 数组的初始化NSArray*firstArray=NSArray arrayWithObject:one;/多个元素初始化时,注意nil作为数组的结束NSArray*secondArra
15、y=NSArray arrayWithObjects:one,two,nil;NSArray*thirdArray=NSArray arrayWithArray:secondArray;NSArray*FourArray=NSArray arrayWithContentsOfFile:path;2024/1/30 周二17数组的常用方法 常用方法NSArray*array=NSArray arrayWithObjects:a,b,c,nil;/获取数组中的元素个数NSInteger count=array count;/根据下标访问对象NSString*firstObj=array objec
16、tAtIndex:0;/在原来的数组上追加对象,返回一个新的数组对象NSArray*addArray=array arrayByAddingObject:ddd;/用指定的字符串将数组中的元素连接起来NSString*arrayStr=array componentsJoinedByString:,;/数组中是否包含某对象BOOL isContain=array containsObject:bbb;/查询指定对象在数组中的元素,如果没此元素,返回NSNotFoundNSInteger index=array indexOfObject:ccc;/获取数组中最后一个元素NSString*las
17、tString=array lastObject;可变数组的常用方法l 可变数组-NSMutableArray,它继承自NSArray 常用方法/初始化,设定元素个数为5,但可以更改NSMutableArray*mutableArray=NSMutableArray arrayWithCapacity:5;/向数组中添加一个元素mutableArray addObject:aaa;/向数组中指定下标插入元素mutableArray insertObject:ccc atIndex:0;/移除指定元素mutableArray removeObject:aaa;/移除指定下标的元素mutableA
18、rray removeObjectAtIndex:0;/向数组中添加数组mutableArray addObjectsFromArray:array;遍历数组l 遍历数组 遍历数组常规方法NSArray*array=NSArray arrayWithObjects:a,b,z,nil;int length=array count;for(int i=0;i length;i+)NSString*element=array objectAtIndex:i;NSLog(%,element);/遍历的性能较低/替换指定的下标元素mutableArray replaceObjectAtIndex:0
19、withObject:replace;/移除所有对象mutableArray removeAllObjects;快速枚举遍历数组 for(NSString*string in array)NSLog(found%,string);/遍历的性能高for(id string in array)NSLog(found%,string);/当不确定数组的元素的类型时,可以选择用id4、集合-字典的概念和常用方法l 遍历数组l Foundation中的字典(NSDictionary,NSMutableDictionary)是由键-值对组成的数据集合。正如,我们在字典里查找单词的定义一样。通过key(键)
20、,查找对象value(值),key通常是字符串对象,也可以是其他任意类型对象。在一个字典对象中,key的值是唯一的。此外,字典对象的键和值不可以为空(nil),如果需要在一个字典对象中表示一个空值,可以使用NSNull对象。l 不可变字典-NSDictionary 字典的初始化字典的初始化方法 常用方法NSNumber*numObj=NSNumber numberWithInt:100;/以一个元素初始化NSDictionary*dic=NSDictionary dictionaryWithObject:numObj forKey:key;/初始化两个元素NSDictionary*dic=NS
21、Dictionary dictionaryWithObjectsAndKeys:numObj,valueKey,numObj2,valueKey2,nil;/初始化新字典,新字典包含 otherDicNSDictionary*dic=NSDictionary dictionaryWithDictionary:otherDic;/以文件内容初始化字典NSDictionary*dic=NSDictionary dictionaryWithContentsOfFile:path;字典的常用方法l 可变字典-NSMutableDictionary继承自NSDictionary 常用方法/获取字典数量N
22、SInteger count=dic count;/通过key获取对应的value对象NSObject*valueObj=dic objectForKey:key;/将字典的key转成一个枚举对象,用于遍历NSEnumerator*enumerator=dic keyEnumerator;/获取所有键的集合NSArray*keys=dic allKeys;/获取所有值的集合NSArray*values=dic allValues;可变字典的常用方法/初始化一个空的可变字典(注意以下代码前后无关联性)NSMutableDictionary*dic2=NSMutableDictionary dic
23、tionaryWithObjectsAndKeys:v1,key1,v2,key2,nil;NSDictionary*dic3=NSDictionary dictionaryWithObject:“v3”forKey:key3;/向字典2对象中添加整个字典对象3dic2 addEntriesFromDictionary:dic3;/向字典2对象中追加一个新的key3和value3dic2 setValue:value3 forKey:key3;/初始化一个空的可变字典NSMutableDictionary*dic1=NSMutableDictionary dictionary;/将空字典1对象
24、的内容设置为字典2对象相同dic1 setDictionary:dic2;dic1 removeObjectForKey:key1;/将字典中key1对应的值删除NSArray*array=NSArray arrayWithOjbects:key1,nil;dic2 removeObjectsForKeys:array;/根据制定的数组(key)移除字典2的内容dic1 removeAllObjects;/移除字典所有对象遍历字典l 遍历字典 快速枚举 一般的枚举 通过枚举类型枚举for(id key in dic)id obj=dic objectForKey:key;NSLog(%,obj
25、);NSArray*keys=dic allKeys;int length=keys count;for(int i=0;i length;i+)id key=keys objectAtIndex:i;id obj=dic objectForKey:key;NSLog(%,obj);遍历字典NSEnumerator*enumerator=dic keyEnumerator;id key=enumerator nextObject;while(key)id obj=dic objectForKey:key;NSLog(%,obj);key=enumerator nextObject;4、集合-集
26、合概念和常用方法l 集合的基本概念 在Foundation框架中,提供了NSSet类,它是一组单值对象的集合,且NSSet实例中元素是无序,同一个对象只能保存一个,并且它也分为可变和不可变对象(可变集合对象,NSMutableSet)。l 不可变集合-NSSet NSSet的初始化/类似与数组的构建,直接创建一个集合NSSet*set1=NSSet alloc initWithObjects:one,two,nil;/通过数组的构建集合NSArray*array=NSArray arrayWithObjects:1,2,3,nil;NSSet*set2=NSSet alloc initWith
27、Array:array;/通过已有集合构建集合NSSet*set3=NSSet alloc initWithSet:set2;集合的常用方法 NSSet的常用方法(BOOL)/集合3中对象的个数int count=set3 count;/以数组的形式返回集合3中所有的对象NSArray*allObjects=set3 allObjects;/返回集合3中的任意一个对象id object=set3 anyObject;/集合4中是否包含内容为2的字符串对象,如果包含返回YES,否则返回NOBOOL isContain=set4 containsObject:2;/集合4中与集合2中是否存在有相同
28、元素的对象,如果有返回YES,否则为NOBOOL isIntersect=set4 intersectsSet:set2;/集合4与集合5的元素是否完全匹配,如果匹配返回YES,否则为NOBOOL isEqual=set4 isEqualToSet:set5;/集合4是否是集合5的子集合,如果是返回YES,否则为NOBOOL isSubset=set4 isSubsetOfSet:set5;集合的常用方法l 可变集合-NSMutableSet,它继承自NSSet 常用方法/创建一个新的集合2,集合2有两个对象(a和b)NSSet*set1=NSSet setWithObjects:a,nil;
29、NSSet*set2=set1 setByAddingObject:b;/通过已有集合7和集合8,创建一个新的集合9NSSet*set7=NSSet setWithObjects:a,nil;NSSet*set8=NSSet setWithObjects:z,nil;NSSet*set9=set7 setByAddingObjectsFromSet:set8;/通过已有的集合10和数组对象,创建一个新的集合11NSArray*array=NSArray arrayWithObjects:a,b,c,nil;NSSet*set10=NSSet setWithObjects:z,nil;NSSet
30、*set11=set10 setByAddinObjectsFromArray:array;可变集合的常用方法/创建一个空的集合(注意以下代码前后无关联性)NSMutableSet*set1=NSMutableSet set;NSMutableSet*set2=NSMutableSet setWithObjects:1,2,nil;NSMutableSet*set3=NSMutableSet setWithObjects:a,2,nil;/集合2“减去”集合3中的元素,集合2最后元素只有1,且为1set2 minusSet:set3;/集合2与集合3中的元素的交集,集合2最后元素只有1个,且为2set2 intersectSet:set3;/集合2与集合3中的元素的并集,集合2最后元素只有3个,且为1,2,aset2 unionSet:set3;/将空集合1设置为集合3中的内容set1 setSet:set3;/根据数组的内容删除集合中的对象set2 addObjectsFromArray:array;set2 removeObject:1;set2 removeAllObjects;2024/1/30 周二32