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

Objective-c 基础框架(初学者-总结)

2016-03-04 14:00 120 查看
一个框架其实就是一个软件包,它包含了多个类。Mac操作系统提供了几十个框架,主要帮助开发者快速的在Mac系统上开发应用程序。其中包括一些基础框架,就是为所有程序开发提供基础的框架,其中几个常用的类包括:字符串(NSString),数字(NSNumber),数组(NSArray),字典(NSDictionary),集合(NSSet)等。这几个类都是经常用到的,所以必须很好的掌握,下来我们就来详细介绍这几个类。

  1.数字对象(NSNumber)

为什么要使用数字对象?我们已经熟悉了使用int等数据类型生明数字变量,但是因为很多类(比如NSArray)都要求使用对象,但int等声明的数字变量不是对象,所以,无法在这些类中使用。NSNumber就是数字对象类。

下面通过一个例子来演示这个数字对象的用法。

  

1#import<Foundation/Foundation.h>
2
3intmain(intargc,constchar*argv[]){
4@autoreleasepool{
5NSNumber*myNumber,*floatNumber,*intNumber,*doubleNumber;
6
7//创建interger类型对象
8intNumber=[NSNumbernumberWithInt:1];
9NSLog(@"intNumber=%li",[intNumberintegerValue]);
10
11//创建long类型对象
12myNumber=[NSNumbernumberWithLong:0xababab];
13NSLog(@"myNumber=%lx",[myNumberlongValue]);
14
15//创建char类型对象
16myNumber=[NSNumbernumberWithChar:'c'];
17NSLog(@"myNumber=%c",[myNumbercharValue]);
18
19//创建float类型对象
20floatNumber=[NSNumbernumberWithFloat:3.14];
21NSLog(@"floatNumber=%f",[floatNumberfloatValue]);
22
23//创建double类型对象
24doubleNumber=[NSNumbernumberWithDouble:3.11];
25NSLog(@"doubleNumber=%lg",[doubleNumberdoubleValue]);
26
27//判断两个对象的值是否相等
28if([intNumberisEqualToNumber:floatNumber])
29NSLog(@"intNumber=floatNumber");
30else
31NSLog(@"intNumber!=floatNumber");
32
33//比较两个对象的值大小
34if([intNumbercompare:floatNumber]==NSOrderedAscending)
35NSLog(@"左边的数字小");
36else
37NSLog(@"右边的数字小");
38}
39return0;
40}


  2.字符串对象

  字符串常量是由一个@的符号和一对双引号括起来的字符序列。例如:@"helloworld"。字符常量和字符串常量是不同的量,它们的区别主要有以下3种:

    1.字符是由单引号括起来的,而字符串常量是由@和双引号括起来的。

    2.字符常量只有一个字符,而字符串常量可以有多个字符。

    3.字符常量只占一个字节。而字符串常量的字节数是由字符个数加1。增加的字符个数是结束符'\0'。

  Objective-C中使用NSString来操作字符串,而不是使用c/c++的char*。它在字符串的前面加一个@符号。比如:@"苹果"。下面通过一个例子来具体表现它在oc中的用法:

  2.1不可修改的字符串(NSString)

  

1#import<Foundation/Foundation.h>
2
3intmain(intargc,constchar*argv[]){
4@autoreleasepool{
5
6//stringWithString是基于一个字符串创建另外一个字符串对象。
7NSString*str1=@"helloworld";
8NSString*str2=[NSStringstringWithString:str1];
9NSLog(@"str1=%@,str2=%@",str1,str2);
10
11//NSString中提供了格式化字符串的方法stringWithFormat,oc中用%@来表示一个字符串的值。
12NSString*name=@"xiaozhang";
13NSString*str3=[NSStringstringWithFormat:@"Iam%@",name];
14NSLog(@"str3=%@",str3);
15
16//在一个字符串的后面新加一个字符串。
17NSString*guilin=@"guilin";
18NSString*welcome=[guilinstringByAppendingString:@"welcomeyou!"];
19NSLog(@"%@",welcome);
20
21//字符串的比较和判断
22BOOLisSame=[str1isEqualToString:@"str3"];
23if(isSame)
24NSLog(@"str1=str2");
25else
26NSLog(@"str1!=str2");
27
28NSComparisonResultresult=[str1compare:str2];
29if(result==NSOrderedSame)//内容相同
30NSLog(@"str1==str2");
31elseif(result==NSOrderedAscending)//左边小于右边
32NSLog(@"str1<str2");
33else//result==NSOrderedDescending//左边大于右边
34NSLog(@"str1>str2");
35
36//字符串大小写的转换
37NSString*str4=[str1uppercaseString];//转换为大写
38NSString*str5=[str1lowercaseString];//转换为小写
39NSLog(@"str4=%@,str5=%@",str4,str5);
40
41//字符串的截取
42NSString*str6=[str1substringToIndex:2];
43NSLog(@"str6=%@",str6);
44
45//去除前4个字符串形成新的字符串
46NSString*str7=[str1substringFromIndex:4];
47NSLog(@"str7=%@",str7);
48
49//从某个字符串到某个字符串形成的新的字符
50NSString*str8=[[str1substringFromIndex:2]substringToIndex:5];
51NSLog(@"str8=%@",str8);
52
53NSRangerang=[str1rangeOfString:@"lo"];
54NSLog(@"包含字符串开始的位置是%lu,长度是%lu",rang.location,rang.length);
55
56if([str1rangeOfString:@"lo"].location==NSNotFound)
57NSLog(@"没有找到包含的字符串");
58else
59NSLog(@"包含字符串开始的位置是%lu,长度是%lu",rang.location,rang.length");
60
61}
62return0;
63}


  2.2可修改的字符串(NSMutableString)

  NSString本身不允许修改,如果要修改的话,可以使用NSMutableString,NSMutableString是NSString的子类。所有NSString都适用于NSMutableString,它提供了附加字符串的方法:

  -(void)appendString:(NSString*)string;

  -(void)appendFormat:(NSSting*)string;

  例如:

NSMutableString*str=[NSMutableStringstringWithString:@"Giulin"];

[strappendString:@"welcomeyou!"];

  3.数组对象

   数组是有序的对象集合,一般情况下,数组中的元素都是相同类型的。类似可变字符串和不可变字符串,也有可变数组和不可变数组。

  3.1不可变数组(NSArray)

  NSArray是数组类,在数组的中的元素必须以nil结尾。以下举个例子来说明它的具体用法:

  


  

#import<Foundation/Foundation.h>

intmain(intargc,constchar*argv[]){

@autoreleasepool{

NSArray*array=[NSArrayarrayWithObjects:@"zhangsan",@"lisi",@"wangwu",@"zhaoliu",nil];

for(inti;i<[arraycount];i++)

NSLog(@"%@",[arrayobjectAtIndex:i]);

if([arrayindexOfObject:@"xiaoli"]==NSNotFound)

NSLog(@"xiaoli不在其中!");

}

return0;

}





  3.2可修改数组(NSMutableArray)

  NSArray是静态数组,所以不能往该数组中添加元素,必须使用NSMutableArray来动态管理数组。NSMutableArray是NSArray的字类。

  

  

  下面通过具体例子来说明它的具体用法:

  

1#import<Foundation/Foundation.h>
2
3intmain(intargc,constchar*argv[]){
4@autoreleasepool{
5NSMutableArray*city=[NSMutableArrayarrayWithObjects:@"西安",@"北京",@"上海",nil];
6[cityaddObject:@"深圳"];//数组中增加一个元素深圳。
7[cityremoveObject:@"上海"];//数组中删除一个元素上海。
8[cityinsertObject:@"桂林"atIndex:1];//在第一个元素那里插入桂林。
9//[cityremoveAllObjects];//删除所有元素。
10for(inti;i<[citycount];i++)
11NSLog(@"%@",[cityobjectAtIndex:i]);
12
13}
14return0;
15
16}


  4.字典对象(NSDictionary和NSMutableDictionary)

  NSDictionary提供了“键-值”对的集合。比如,使用字典类实现学生学号到姓名的存放,编号是一个键(唯一性),姓名是一个值。它的方法有:

  


  下面举个例子来看其具体的应用:

  

1#import<Foundation/Foundation.h>
2
3intmain(intargc,constchar*argv[]){
4@autoreleasepool{
5NSDictionary*student=[NSDictionarydictionaryWithObjectsAndKeys:@"xiaohong",@"01",@"xiaoming",@"02",@"xiaoqiang",@"03",nil];
6NSLog(@"%@",[studentobjectForKey:@"01"]);//查找01键对应的值,不存在返回nil。
7NSLog(@"人数:%li",[studentcount]);//获得个数。
8}
9return0;
10}


  同上面介绍的字符串和数组类似,NSDictionary也是不可修改的字典。可变字典是NSMutableDictionary,它可以动态的添加和删除元素,它的方法有:

  


  

   下面通过一个具体的例子来简单应用一下:

1#import<Foundation/Foundation.h>
2
3intmain(intargc,constchar*argv[]){
4@autoreleasepool{
5NSMutableDictionary*student=[NSMutableDictionarydictionary];
6[studentsetObject:@"xiaohong"forKey:@"01"];
7[studentsetObject:@"xiaoming"forKey:@"02"];
8[studentsetObject:@"xiaodong"forKey:@"03"];
9
10NSLog(@"01:%@",[studentobjectForKey:@"01"]);
11NSLog(@"02:%@",[studentobjectForKey:@"02"]);
12NSLog(@"03:%@",[studentobjectForKey:@"03"]);
13
14}
15return0;
16}


  4.集合对象(NSSet) 

  

  集合对象是一组单值对象的组合,比如1个包含1到50个数字的集合。集合对象的操作包括搜索,添加,删除集合中的成员,比较2个集合,计算两个集合的交集和并集等。在下面的程序中,演示了一些集合的常用方法。

  

1#import<Foundation/Foundation.h>
2
3@interfaceNSSet(printInteger)
4
5-(void)printSet;
6
7@end
8
9@implementationNSSet(printInteger)
10
11-(void)printSet{
12for(NSNumber*integerinself){
13printf("%li",[integerintegerValue]);
14}
15printf("\n");
16}
17@end
18
19intmain(intargc,constchar*argv[]){
20@autoreleasepool{
21NSMutableSet*set1=[NSMutableSetsetWithObjects:[NSNumbernumberWithInteger:1],[NSNumbernumberWithInteger:5],[NSNumbernumberWithInteger:3],nil];
22
23NSMutableSet*set2=[NSMutableSetsetWithObjects:[NSNumbernumberWithInteger:7],[NSNumbernumberWithInteger:2],[NSNumbernumberWithInteger:4],nil];
24
25if([set1isEqual:set2]==YES)//比较两个集合是否相等
26NSLog(@"set1=set2");
27else
28NSLog(@"set1!=set2");
29
30if([set1containsObject:[NSNumbernumberWithInteger:2]]==YES)//判断该集合是否包含某一元素
31NSLog(@"set1包含2");
32else
33NSLog(@"set1不包含2");
34
35[set1addObject:[NSNumbernumberWithInteger:6]];//向集合中添加元素
36[set1removeObject:[NSNumbernumberWithInteger:6]];//删除某个元素
37
38[set1intersectSet:set2];//计算2个集合的交集
39[set1unionSet:set2];//计算2个集合的并集
40[set1printSet];
41}
42return0;
43}


  5.枚举访问

  对于数组,字典和集合,Objective-C提供了枚举方法来访问各个元素,具体方法有两种。

  方法1:

  


  方法2:

  

  

  第二种方法简洁,所以经常用第二种方法,一般称第二种方法为快速枚举。下面举一个字典快速枚举的例子:代码定义了一个NSString类型的对象,用来保存每次取出来的健值,然后基于取出的键,调用字典对象student的objectForKey:方法将值也取出来,并打印到控制台上。

  

1#import<Foundation/Foundation.h>
2
3intmain(intargc,constchar*argv[]){
4@autoreleasepool{
5NSMutableDictionary*student=[NSMutableDictionarydictionary];
6[studentsetObject:@"xiaohong"forKey:@"01"];
7[studentsetObject:@"xiaoming"forKey:@"02"];
8[studentsetObject:@"xiaodong"forKey:@"03"];
9
10for(NSString*keyinstudent)
11NSLog(@"%@:%@",key,[studentobjectForKey:key]);
12}
13return0;
14}


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