您的位置:首页 > 移动开发 > Objective-C

Objective-C基础学习笔记(九)-Foundation

2015-03-24 09:50 483 查看
一.Foundation框架简介

伟大的苹果公司提供了很多可以在应用程序里调用的框架。要使用一个框架,需要将它添加到你的项目中,你的项目才可以使用它。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);
}];

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: