Objective-C基础学习笔记(九)-Foundation
2015-03-24 09:50
483 查看
一.Foundation框架简介
伟大的苹果公司提供了很多可以在应用程序里调用的框架。要使用一个框架,需要将它添加到你的项目中,你的项目才可以使用它。Foundation框架为所有的应用程序提供基本系统服务你的应用程序,具体可以干什么呢?
使用Foundation可以:
创建和管理集合,比如数组和字典
访问存储在应用程序里的图片和其它资源
创建和管理字符串
提交和接收通知
创建日期和时间对象
自动发现IP网络上的设备
操作URL流
执行异步代码
二.Foundation框架中一些结构体
NSRange结构体
1.NSRange这个结构体的成员和定义如下:
2.作用:通过它的两个成员变量可以知道,NSrange能够表示一个范围从location位置开始的length长度;例如:
1)表示love在字符串@"iloveoc"中的位置则:location=2;length=4;
2)56,78,89这三组数据在数组中{10,18,56,78,89}的范围;location=2;length=3
3.得到NSRange这个结构体的两种常见方式为
1)直接创建:NSRanger2=NSMakeRange(2,4);
2)通过字符串的rangeOfString:方法可返回某子串在母串在母串中的位置,这种方法如果找不到
length=0
location=NSNotFound即-1
4.NSRange使用示例:
2015-03-2410:33:43.697Foundation框架-结构体[496:21768]loc2,length4
2015-03-2410:33:43.699Foundation框架-结构体[496:21768]loc4,length4
NSPoint\CGPoint结构体
1.定义如下:
2.NSPoint\CGPoint是一样呢,可用于表示一个位置坐标
3.常用的设定位置的方法:
CGPointpoint=CGPointMake(20,20);//开发中最常用
CGPointp1=NSMakePoint(10,10);
4.CGPointZero==CGPointMake(0,0);
5.判断两个点是否相等的方法
NSSize\CGSize结构体
1.定义如下:
2.作用,可用于表示一个矩形,一个元素占用屏幕的范围
3.常用的设定范围的方法:CGSizesize=CGSizeMake(100,200);
4.CGSizeZero==CGSizeMake(0,0);
5.判断两个size是否相等的方法
NSRect\CGRect
1.定义如下:
2.作用,这个结构体涵盖了,基本位置的点和占用屏幕的大小,就可确定这个元素在屏幕的具体位置和范围,确切的说可以表示一个矩形
3.常用的设定结构体值的方法
4.判断一个矩形是否包含了某点的方法
BOOLr=CGRectContainsPoint(CGRectMake(0,0,100,200),CGPointMake(100,201));</span>
5.开发过程中经常要查看几个结构的值,一般都转化为字符串:
三.NSString类
NSString:不可变字符串
1.创建字符串的一些方法:
2.将字符串导入到文件的方法:
NSMutableString不可变字符串:
可变字符串,就是字符串创建之后可以改写,可删除可添加新字符的字符串。反之上面的NSString创建的字符串就是不可变的,创建之后不能对原有的字符串进行增删改操作。
常用的操作方法:
2015-03-2411:26:34.824NSString[539:35702]s1=helloimutale100apend
s2=helloiamnotmutable
s3=helloiamnotmutablehahhaha
四.NSArray与SMutableArray数组
OC数组只能存放OC对象,正常情况下不能存放非Oc对象如intchar等类型。
NSArray不可变数组,创建之后元素个数等都不能改变:
NSArray数组的几种创建方式:
数组中元素个数的访问:get方法,成员变量count
数组中元素的访问的方法两种:
数组中元素遍历的四种方法:
NSMutableArray:可变数组
可变数组相比不可变数组,他能删除添加元素:
可变数组的创建:
/*可变数组的创建*/
//@[]只创建不可变数组,返回值是NSArray
//1.创建初始化为空的可变数组
NSMutableArray*marray=[[NSMutableArrayalloc]init];
//2.创建初始不为空的数组arrayWithObjects方法后面必须加nil结束
NSMutableArray*marray=[NSMutableArrayarrayWithObjects:@"kimi",@"kate",nil];
可变数组的添加元素方法:
可变数组的删除元素方法:
可变数组的遍历同不可变数组相同。
五.NSSet与NSMutableSet
1.NSSet:既然作为集合就能存放很多对象,这是集合的特性.
2.NSSet和NSArray:
共同点:
1>>都是集合,都能存放OC对象
2>>只能存放OC对象,不能存放非OC类对象类型(基本数据类型)
3>>本身不可变,都有一个可变的子类
不同点
NSArray:有序
NSSet:无序
3.NSSet的创建与初始化
4.从set中随机拿出一个元素,无序的随机的。
5.NSMutableSet的操作:
六.字典NSDictionary\NSMutableDictionary:
1.字典作用:通过一个key找到一个值,key---->value
2.字典的创建
3.字典元素的访问
4.字典中键值对的个数
//返回的是键值对的个数
NSLog(@"%ld",dict2.count);
5.可变字典NSMutableDictionary:
1)可变字典的操作:创建、添加、删除;
伟大的苹果公司提供了很多可以在应用程序里调用的框架。要使用一个框架,需要将它添加到你的项目中,你的项目才可以使用它。Foundation框架为所有的应用程序提供基本系统服务你的应用程序,具体可以干什么呢?
使用Foundation可以:
创建和管理集合,比如数组和字典
访问存储在应用程序里的图片和其它资源
创建和管理字符串
提交和接收通知
创建日期和时间对象
自动发现IP网络上的设备
操作URL流
执行异步代码
二.Foundation框架中一些结构体
NSRange结构体
1.NSRange这个结构体的成员和定义如下:
typedefstruct_NSRange{ NSUIntegerlocation;//位置 NSUIntegerlength;//长度 }NSRange;
2.作用:通过它的两个成员变量可以知道,NSrange能够表示一个范围从location位置开始的length长度;例如:
1)表示love在字符串@"iloveoc"中的位置则:location=2;length=4;
2)56,78,89这三组数据在数组中{10,18,56,78,89}的范围;location=2;length=3
3.得到NSRange这个结构体的两种常见方式为
1)直接创建:NSRanger2=NSMakeRange(2,4);
2)通过字符串的rangeOfString:方法可返回某子串在母串在母串中的位置,这种方法如果找不到
length=0
location=NSNotFound即-1
4.NSRange使用示例:
intmain() { /*NSRange结构体的创建*/ NSRanger2=NSMakeRange(2,4);//(掌握)方式常用 NSLog(@"loc%lu,length%lu",r2.location,r2.length);24 /*查找veo在str中的位置*/ NSString*str=@"iloveoc"; //如果找不到length=0location=NSNotFound即-1 NSRanger3=[strrangeOfString:@"veo"]; NSLog(@"loc%lu,length%lu",r3.location,r3.length);//44 return0; }
2015-03-2410:33:43.697Foundation框架-结构体[496:21768]loc2,length4
2015-03-2410:33:43.699Foundation框架-结构体[496:21768]loc4,length4
NSPoint\CGPoint结构体
1.定义如下:
#defineCGFLOAT_TYPEdouble structCGPoint{ CGFloatx;//double类型 CGFloaty; }; typedefstructCGPointCGPoint; typedefCGPointNSPoint;</span>
2.NSPoint\CGPoint是一样呢,可用于表示一个位置坐标
3.常用的设定位置的方法:
CGPointpoint=CGPointMake(20,20);//开发中最常用
CGPointp1=NSMakePoint(10,10);
4.CGPointZero==CGPointMake(0,0);
5.判断两个点是否相等的方法
BOOLp=CGPointEqualToPoint(CGPointMake(10,10),CGPointMake(10,10)); //返回值是BOOL类型
NSSize\CGSize结构体
1.定义如下:
structCGSize{ CGFloatwidth; CGFloatheight; }; typedefstructCGSizeCGSize;</span>
2.作用,可用于表示一个矩形,一个元素占用屏幕的范围
3.常用的设定范围的方法:CGSizesize=CGSizeMake(100,200);
4.CGSizeZero==CGSizeMake(0,0);
5.判断两个size是否相等的方法
BOOLs=CGSizeEqualToSize(CGSizeMake(100,200),CGSizeMake(100,200));
NSRect\CGRect
1.定义如下:
structCGRect{ CGPointorigin; CGSizesize; }; typedefstructCGRectCGRect;
2.作用,这个结构体涵盖了,基本位置的点和占用屏幕的大小,就可确定这个元素在屏幕的具体位置和范围,确切的说可以表示一个矩形
3.常用的设定结构体值的方法
CGRectr1=CGRectMake(0,2,100,200); CGRectr2=NSMakeRect(2,1,200,100); CGRectr3={{0,0},{100,200}}; CGRectr4={p1,s1};//直接使用点结构体和size结构体变量</span>
4.判断一个矩形是否包含了某点的方法
BOOLr=CGRectContainsPoint(CGRectMake(0,0,100,200),CGPointMake(100,201));</span>
5.开发过程中经常要查看几个结构的值,一般都转化为字符串:
//开发中经常查看:常规做法将所有数据转化为字符串 NSString*str=NSStringFromPoint(p1); NSString*str1=NSStringFromSize(s1); NSString*str2=NSStringFromRect(r1); NSLog(@"p1:%@",str); NSLog(@"s1:%@",str1); NSLog(@"r1:%@",str2);
三.NSString类
NSString:不可变字符串
1.创建字符串的一些方法:
intmain() { /*字符串的创建方式1@""*/ NSString*str=@"hello"; /*字符串的创建方式2类方法+initWithFormat*/ NSString*str1=[[NSStringalloc]initWithFormat:@"hello%d",10]; /*字符串的创建方式3C字符串转OC字符串*/ NSString*str2=[[NSStringalloc]initWithUTF8String:"jack"]; /*OC转C*/ constchar*str3=[str2UTF8String]; /*字符串的创建方式4:本地路径文件使用*/ /*从文件中读取字符串涉及到中文就用encoding:NSUTF8StringEncoding*/ NSString*str4=[[NSStringalloc]initWithContentsOfFile:@"/Users/niko/Desktop/ios/test/infile.txt"encoding:NSUTF8StringEncodingerror:nil]; NSLog(@"%@",str4); /*字符串的创建方式5:资源路径文件使用*/ //URL:资源路径格式:协议头://路径 //本地资源:file:// NSURL*urlLocal=[[NSURLalloc]initWithString:@"file:///Users/niko/Desktop/ios/test/infile.txt"]; //网络资源)http://weibo.com/a.png NSURL*urlNet=[[NSURLalloc]initWithString:@"http://www.baidu.com"]; /*不带头的本地文件路径的本地资源*/ NSURL*urlFile=[NSURLfileURLWithPath:@"/Users/niko/Desktop/ios/test/infile.txt"]; /*使用资源创建字符串*/ NSString*str5=[[NSStringalloc]initWithContentsOfURL:urlFileencoding:NSUTF8StringEncodingerror:nil]; NSLog(@"str5%@",str5); 开发中经常用这种类方法创建字符串 一般都会有个类方法和对象方法配对,例如有initwithxxx(对象方法)就有stringWithxxx(类方法) [NSStringstringWithFormat:@""]; [NSStringstringWithContentsOfFile:(NSString*)encoding:(NSStringEncoding)error:NSError*)]; [NSStringstringWithContentsOfURL:(NSURL*)encoding:(NSStringEncoding)error:(NSError*__autoreleasing*)]; [NSURLURLWithString:(NSString*)]; return0; }
2.将字符串导入到文件的方法:
intstring_export() { //atomically---安全:写失败不会创建 /*字符串导出到文件方法1:writeToFile*/ [@"niko\nwirte"writeToFile:@"/Users/niko/Desktop/ios/test/infile.txt"atomically:YESencoding:NSUTF8StringEncodingerror:nil]; /*字符串导出到文件方法2writeToURL:*/ NSString*str=@"1234567"; NSURL*url=[NSURLfileURLWithPath:@"/Users/niko/Desktop/ios/test/infile.txt"]; [strwriteToURL:urlatomically:YESencoding:NSUTF8StringEncodingerror:nil]; return0; }
NSMutableString不可变字符串:
可变字符串,就是字符串创建之后可以改写,可删除可添加新字符的字符串。反之上面的NSString创建的字符串就是不可变的,创建之后不能对原有的字符串进行增删改操作。
常用的操作方法:
NSMutableString*s1=[NSMutableStringstringWithFormat:@"helloiammutale%d",100]; /*s1是可变的可往里面加东西,在原基础上加的不会反回新的*/ [s1appendString:@"apend"]; /*也可以删除某个范围的字符am*/ /*下面这种方法常用先找到要删除字符的范围,再利用delete去删*/ //[s1deleteCharactersInRange:NSMakeRange(8,2)]; NSRanger1=[s1rangeOfString:@"am"]; [s1deleteCharactersInRange:r1]; /*stringByAppendingString:方法在原有基础上拼接出一个新的,但并不会影响原有的字符串 返回值是不可变字符串*/ NSString*s2=[NSStringstringWithFormat:@"helloiamnotmutable"]; NSString*s3=[s2stringByAppendingString:@"Iamappeding"]; NSLog(@"s1=%@\ns2=%@\ns3=%@",s1,s2,s3); return0;
2015-03-2411:26:34.824NSString[539:35702]s1=helloimutale100apend
s2=helloiamnotmutable
s3=helloiamnotmutablehahhaha
四.NSArray与SMutableArray数组
OC数组只能存放OC对象,正常情况下不能存放非Oc对象如intchar等类型。
NSArray不可变数组,创建之后元素个数等都不能改变:
NSArray数组的几种创建方式:
intNSArray_init() { //1.创建一个空数组:永远是空数组后面不能在添加了 NSArray*array1=[NSArrayarray]; //2.创建初始为一个元素的数组arrayWithObject: NSArray*array3=[NSArrayarrayWithObject:@"mike"]; //3.创建初始为n多个对象的数组arrayWithObjects //arrayWithObjects方法后面必须加nil结束,nil是数组结束的标记, NSArray*array2=[NSArrayarrayWithObjects:@"jack",@"niko",nil]; //4.开发中快速创建数组返回值是NSArray*不可变数组*/ NSArray*array4=@[@"jack",@"niko",@"moki"];
数组中元素个数的访问:get方法,成员变量count
//数组元素个数 NSLog(@"array%ld",array2.count);
数组中元素的访问的方法两种:
//数组元素的访问方式1根据位置访问 NSLog(@"array2[1]%@",[array2objectAtIndex:1]); //数组元素的访问方式2和C数组一样,array2[0]这是编译特性,编译器帮我们改写了 NSLog(@"array2[0]%@",array2[0]);
数组中元素遍历的四种方法:
intmain() { /*1.最粗暴直接的数组遍历*/ NSLog(@"%@",array); /*2.for循环慢速遍历*/ for(inti=0;i<array.count;i++) { NSLog(@"%d---%@",i,array[i]); } /*3.开发中快速遍历数组:缺点不知道第几次 方法一:加i计数 方法二:使用indexOfObjectint返回位置 */ for(idobjinarray5) { //找到obj元素在数组中的位置 NSUIntegeri=[array5indexOfObject:obj]; NSLog(@"%ld--%@",i,obj); /*退出循环:*/ if(i==0) { break;//这种方式退出 } } /*4.enumerateObjectsUsingBlockBLock参数为block代码块 将当前元素和索引位置当做参数歘传给block,stop用来停止遍历的*/ [arrayenumerateObjectsUsingBlock:^(idobj,NSUIntegeridx,BOOL*stop){ NSLog(@"%ld--%@",idx,obj); /*怎么退出循环*/ if(idx==5) { //stop为什么是指针呢?传指针可改变里面的值 *stop=YES;//停止 } }]; return0; }
NSMutableArray:可变数组
可变数组相比不可变数组,他能删除添加元素:
可变数组的创建:
//@[]只创建不可变数组,返回值是NSArray
//1.创建初始化为空的可变数组
NSMutableArray*marray=[[NSMutableArrayalloc]init];
//2.创建初始不为空的数组arrayWithObjects方法后面必须加nil结束
NSMutableArray*marray=[NSMutableArrayarrayWithObjects:@"kimi",@"kate",nil];
可变数组的添加元素方法:
/*添加元素*/
//1.正规的添加元素:-(void)addObject:(id)anObject;
[marrayaddObject:[[Personalloc]init]];
//2.最直接的,编译器帮我们做
marray[marray.count]=@"hello";
//3.OC数组只能存放OC对象,不能存放非Oc对象如intchar,想要放就得另想办法
//[marrayaddObject:15];
//[marrayaddObject:nil];
可变数组的删除元素方法:
可变数组的遍历同不可变数组相同。
五.NSSet与NSMutableSet
/*删除元素*/
//1.删除指定元素
[marrayremoveObject:@"hello"];
//2.根据位置删除元素
[marrayremoveObjectAtIndex:0];
//3.删除所有元素
[marrayremoveAllObjects];
1.NSSet:既然作为集合就能存放很多对象,这是集合的特性.
2.NSSet和NSArray:
共同点:
1>>都是集合,都能存放OC对象
2>>只能存放OC对象,不能存放非OC类对象类型(基本数据类型)
3>>本身不可变,都有一个可变的子类
不同点
NSArray:有序
NSSet:无序
3.NSSet的创建与初始化
//1.初始化空的set
NSSet*s1=[NSSetset];
//2.初始化一个对象的set
NSSet*s2=[NSSetsetWithObject:@"hello"];
//3.初始化多个个对象的set
NSSet*s3=[NSSetsetWithObjects:@"jimi",@"kate",nil];
4.从set中随机拿出一个元素,无序的随机的。
/*随机拿出一个元素*/
NSString*str=[s1anyObject];
5.NSMutableSet的操作:
//创建初始化
NSMutableSet*s=[NSMutableSetset];
//添加元素
[saddObject:@"hhh"];
//删除元素
[sremoveObject:@"hhh"];
六.字典NSDictionary\NSMutableDictionary:
1.字典作用:通过一个key找到一个值,key---->value
2.字典的创建
/*字典的键值对是没有顺序的*/
/*一个key只能对应一个值,后面的覆盖前面的*/
/*允许不同的key对应同样的值*/
//1.第一种创建方法
NSDictionary*dict=[NSDictionarydictionaryWithObject:@"jack"forKey:@"j"];
//2.第二种创建方法直接输入Key和值的数组
NSArray*keys=@[@"a",@"b",@"c",@"d"];
NSArray*objs=@[@"after",@"boy",@"cool",@"duang"];
NSDictionary*dict2=[NSDictionarydictionaryWithObjects:objsforKeys:keys];
//3.第三种创建方法不常用,有更简单的见方法四
NSDictionary*dict3=[NSDictionarydictionaryWithObjectsAndKeys:
@"comeon",@"c",
@"duangguang",@"d",
@"effective",@"e",
@"fuck",@"f",
@"global",@"g",nil
];
//4.直接大括号的形式
NSDictionary*dict4=@{@"c":@"comeon",@"d":@"duang"};
//5.直接创建一个空的
NSDictionary*dict5=[NSDictionarydictionary];
3.字典元素的访问
/*字典对象的查看*/
idobj=[dict6objectForKey:@"c"];
/*开发中常用这种*/
idobj=dict3[@"c"];//编译器帮我们做好了装换,装换成上一步的代码
4.字典中键值对的个数
NSLog(@"%ld",dict2.count);
5.可变字典NSMutableDictionary:
1)可变字典的操作:创建、添加、删除;
//1.创建一个空的可变字典
NSMutableDictionary*mdict=[NSMutableDictionarydictionary];
/*添加键值对*/
[mdictsetObject:@"come"forKey:@"c"];
[mdictsetObject:@"duang"forKey:@"d"];
/*移除键值对*/
[mdictremoveObjectForKey:@"c"];
/*可变数组不能使用大括号创建
NSMutableDictionary*mdict2=@{@"c":@"jack"};
[mdictsetObject:@"ending"forKey:@"e"];
NSLog(@"%ld",mdict2.count);
*/
/*可变字典的遍历*/
[mdictenumerateKeysAndObjectsUsingBlock:^(idkey,idobj,BOOL*stop){
NSLog(@"%@---%@",key,obj);
}];
相关文章推荐
- Objective-C基础教程学习笔记(八)Foundation Kit快速教程
- Objective-C基础学习笔记(九)-Foundation
- Objective-C基础教程(第一版)-学习笔记第八章Foundation Kit快速教程
- Programming in Objective-C 学习笔记07——Foundation框架基础01
- IOS学习笔记——Objective-c基础(一)
- Objective-C基础教程学习笔记(六)源文件组织
- Objective-C 学习笔记(一)hello world和基础
- Objective-C基础教程学习笔记(九)内存管理
- Object-c基础编程学习笔记-Foundation
- Objective-C基础教程学习笔记(十五)文件加载与保存
- Objective-C学习笔记(1) 基础知识
- Objective-C基础教程学习笔记(十二)类别
- Objective-c学习笔记-基础版
- Objective-C基础教程学习笔记(附…
- Objective-C学习笔记第八章Foundation Kit快速教程
- Objective-C基础教程学习笔记(附录)从Java转向Objective-C
- Objective-C基础教程学习笔记(四)继承
- Objective-C基础教程学习笔记(十六)键/值编码
- Objective-C基础教程学习笔记(三)面向对象编程基础知识
- Objective-C基础教程学习笔记(附录)从Java转向Objective-C