黑马程序员—OC语言基础—Foundation框架小结

————————Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ———————

一、Cocoa框架的大致了解

苹果为我们提供了丰富和完善的框架体系,我们只要合理使用这些框架就能完成绝大部分的工作,极大的提高了我们的编程效率。下面我们简要了解一下这些框架和使用场合。

1Cocoa框架

Cocoa框架是苹果创建的专门用于MacOSIOS的原生API,由NeXtSTEP演变而来,严格遵守MVC模型,他是一个庞大的框架集合,我们本节所要了解的各种框架,都是Cocoa框架的一个个部分,Cocoa框架可以自适应MAC OSIOS两大平台,

2Foundation框架

在前面的学习中,我们主要用到的就是Foundation框架,Foundation框架规范了基本的OC结构类型、表达式、消息传递等机制,设置了NSObject基类及服务,并在此基础上,创建了大量基础的对象类。

3UIKit框架

UIKitIOS中用于构建用户界面及用户交互的基本框架,可以说,一个IOS应用程序离不开UIKit框架,该框架包含了UIViewUIButtonUITextfieldUIResponder等基本的用户交互类,以及UIColorUIImageUINib等相关类,我们可以直接调用UIkit中为我们提供的丰富交互类库,同时可以在此基础上定制自己的UI对象,实现丰富的用户界面。

4Core Data框架

该框架采用SQLlite技术创建和管理对象,优化内存存储,同时支持基于文档的应用程序,包括NSAtomicNSFetchRequestNSManagedObjectNSSaveChangesRequest等类。我们如果要实现undo/redo、优化存储、管理表视图结果以及创建基于文档的应用程序时,需要用到Core Data中的功能。

5Core Graphics框架

该框架为底层绘图函数库,可以实现UIKit无法实现的复杂图形的绘制(如曲线的绘制),我们可以用他来创建基于路径的绘图,进行图形的抗锯齿渲染以及图片、PDF、梯度、颜色等信息的底层处理,

6Quartz Core框架

我们采用UIKit框架创建一个窗体,一个按钮,或者播放一个视频,其实归根结底,还是要用到Quarzt Core框架,这个框架为我们提供屏幕显示最基本的层、帧、运动和变形等实现,如果我们要实现一些UIKit没给我们提供的功能或者特效,就要用到Quarzt Core框架里的类或者功能。

7OpenGL ES框架

该框架支持2D3D绘图及渲染,是一个完整的游戏引擎,他直接访问底层设备,提供高速、复杂的视觉体验,能够创建2D3D图形,实现复杂的图形分析和变化,一般用来制作视觉冲击较大的大型游戏及娱乐项目,也可以用来分析和研究图形。

这些框架在开发过程中可能都会涉及到,我们在此是基础的学习,更偏向于将Foundation框架的服务搞懂了。以后学到其他框架的使用,我会再总结。


二、Foundation框架

1. Foundation框架的主头文件名称就是Foundation.h

2. Foundation框架包含了很多数据类型(结构体,枚举)和类

3.Foundation框架中的结构体(NSRangeNSPointCGPoint),NSSizeCGSize),NSRectCGRect))

1)NSRange(表示范围)(包含两个成员:locationlength

1@"I love oc"; love范围可表示为(location=2 length=4

[10,19,20,21,22]最后三个数(20,21,22)的范围是(location=2length=3

2:表示@"I love oc"; love的范围

NSRange r = NSMakeRange(2,4);

3:查看@"I love oc"; love的范围

NSString * str = @"I love oc";
NSRange range = [str rangeOfString:@"love"];
NSLog(@"location=%d,length=%d",range.location,range.length);

2. NSPointCGPoint(表示点坐标(xy))

创建方式:

CGPoint  P1=NSMakePoint(10,10)
NSPoint  P2=CGPointMake(10,10)

3. NSSizeCGSize)(表示尺寸)(宽度(width)高度(height))

创建方式:

CGSize  S1=CGSizeMake(100,20)
NSSize S2=CGMakeSize(20,10)

4. NSRectCGRect

CGRect r1=CGRectMake(0,0,100,50)//CGRect包含了CGPoint(0,0)和CGSize (100,50)

5. 将结构体转换为字符串:

CGPoint  P1=NSMakePoint(10,10);
NSString*str=  NSStringFromPoint(P1);      //将P1这个结构体转成字符串
NSLog(@"%@",str);  // 输出结果为{10,10}

6.结构体的其它用法

1)坐标原点的表示方法

1CGPointMake00

2CGPoint Zero

2)判断两个点是否相同(BOOL类型)

CGPoint EqualToPoint((CGPoint  point1),(CGPoint point2))//可以将  CGPoint换成CGSize或者 CGRect
3)判断一个点是否在一个范围内

CGRectContainsPoint((CGRect rect),(CGPoint  point))

使用这些函数的前提是CoreGraphics框架


三、NSString(不可变)

1. 字符串(NSString)的创建方式

1NSString * s1=@"4234";

2NSString * s2=[[NSString alloc] initwithstring :@"jack"];(不常用)

3NSString * s3=[[NSString alloc] initwithFormat :@"age is %d"10] ;

4NSUTF8StringEncoding用到中文就可以用这种编码

NSString*s5=[[NSString alloc] initwithContentsOfFile@"/Users/apple/Desktop/1.txt"encoding:NSUTF8StringEncoding         error:nil];              //桌面文件路径

//URL:资源路径(协议头://路径)

网络资源   http://

本地资源   file://

服务器资源: ftp://

NSURL *url = [[NSURL alloc] initWithString:@"file:///Users/apple/Desktop/1.txt"];

NSURL *url = [NSURL fileURLWithPath:@"/Users/apple/Desktop/1.txt"];

5NSString *s6 = [[NSString alloc] initWithContentsOfURL:urlencoding:NSUTF8StringEncoding error:nil];

6NSString *s7 = [s2 stringByAppendingString:@" 1112"];

一般都会有一个类方法跟对象方法配对

[NSURL URLWithString:<#(NSString *)#>];

[NSString stringWithFormat:@""];

[NSString stringWithContentsOfFile:<#(NSString *)#>encoding:<#(NSStringEncoding)#> error:<#(NSError *__autoreleasing*)#>];

2. C语言字符串与OC字符串的转换

1C语言字符串转为OC字符串NSString *s7 = [[NSString alloc]initWithUTF8String:"jack"];

2OC字符串转为 C语言字符串:constchar *cs = [s4 UTF8String];

3. 将一个字符创写到文件中

[@"Jack\nJack"writeToFile:@"/Users/apple/Desktop/my.txt" atomically:YES encoding:NSUTF8StringEncoding error:nil];

//"jack"这个字符串写进/Users/apple/Desktop/my.txt这个文件中去(一般写Yes,安全性高)

也可以调用类方法实现:

[str writeToURL:url atomically:YESencoding:NSUTF8StringEncoding error:nil];

4. 输出: NSLog@”我在%@上课”,str;

5. 获取当前字符串的长度:[str length];//字符串length方法返回的是字符串的字数(空格算一个字)


四、NSMutableStringNSString的子类)(可变的)

1. NSString所有的创建方式,NSMutableString都拥有

2. NSMutableString是可变的,可以往里面增加或删除内容

3. 拼接

NSMutableString *s1 = [NSMutableStringstringWithFormat:@"my age is 10"];
[s1 appendString:@" 11 12"];        // 拼接内容到s1的后面

4. 删除

NSMutableString *s1 = [NSMutableStringstringWithFormat:@"my age is 10"];
[s1 deletecharactersInRange:NSMakeRange(4,2)];      //删除s1中某个位置范围的字符

5. 如果要删除某个固定的字符

1)首先获取is的范围

NSRange range = [s1 rangeOfString:@"is"];

2)再进行删除

[s1 deleteCharactersInRange:range];

补充:NSString也有appendstring方法,但是它不会改变原来的字符串,只是返回了一个新的拼接好的字符串


五、NSArray(不可变数组)(有序的)

1. Foundation框架下有很多类:NSStringNSArrayNSSetNSDictionaryNSDateNSObject

2. NSArray是一个集合类(只能存放OC对象,不能存放非OC对象(基本数据类型:intstructenum))

3. 创建方式:

1NSArray*array=[NSArraywithobjects:@"jack",@"rose",nil];   //nil是数组元素结束的标志

2)快速创建:NSArray*array=@[@"jack",@"rose"]        //一般选用这种创建方式

4. OC数组不能存放空值(nil

5. 数组元素的个数:

[array count];

NSLog@"%ld",array.count

6. 拿出数组中的某个元素

1[array  objectAtIdex:1];         //拿出数组的第一个元素

2array[0];                      (一般选用这种方式)

7. NSArray的遍历

1

for(int i=0;i<array.count;i++)
{
    NSLog(@ "@%",array[i]);
}

2)快速遍历

for (id obj in array) // id  obj代表数组中的每一个元素,把array中的每个元素拿出来,赋值给obj
{
    // 找出obj元素在数组中的位置
    NSUInteger i=[arrayindexOfObject :obj];
    NSLog(@"%@-%@",i,obj);
}

3)利用block

[array enumerateObjectsUsingBlock:
 // 每遍历到一个元素,就会调用一次block
 // 并且当前元素和索引位置当做参数传给block
 ^(id obj, NSUInteger idx, BOOL *stop)      //stop为停止遍历
 {
     NSLog(@"%ld - %@", idx, obj);
     if (idx == 0)
     {
         // 停止遍历
         *stop = YES;
     }
     
 }];


六、NSMutableArrayNSArray的子类)(可变数组)(无序的)

1. 添加元素

NSMutableArray*array=[NSMutableArray array];
[array addobject:[[person alloc]init]];
[array addobject:@"jack"];

2. 删除元素

[array removeAllobjects];   //删除所有元素
[array removeobject:@"jack"];//删除指定元素"jack"
[array removeobjectAtIndex:2];//删除第二个元素

错误写法

1[array addobject:10];   //OC数组不能存放基本数据类型

2[array addobject:nil];   //不能为空

3NSMutableArray*array=@[@"jack",@"rose"];//@[]只可以创建不可变数组NSArray


七、NSDictionary

顾名思义,这是一个字典类,如字典一样,知道一个字母便可找到对应的许多内容,那么NSDictionary里面放的就是类似字典的键值。key是索引,value是对应的值。字典的无序的,字典不允许有相同的key,但允许有相同的valueObject

1.创建一个字典

1)

NSDictionary *dict = [NSDictionary dictionaryWithObject:@"jack" forKey:@"name"];

2)

NSArray *keys = @[@"name", @"address"];
NSArray *objects = @[@"jack", @"北京"];
NSDictionary *dict = [NSDictionary dictionaryWithObjects:objects forKeys:keys];

3

NSDictionary *dict = <span style="font-family: Arial, Helvetica, sans-serif;">[NSDictionary dictionaryWithObjectsAndKeys:@"jack", @"name",@"北京", @"address",@"32423434", @"qq", nil ];</span>

4)快速创建

NSDictionary *dict = @{@"name" : @"jack", @"address" : @"北京"};

2.根据键找到值

id obj = [dict objectForKey:@"name"]== id obj = dict[@"name"];
NSLog(@"%@", obj);

3.返回的是键值对的个数

NSLog(@"%ld", dict.count);

4.遍历字典

1)

NSArray *keys = [dict allKeys];
for (int i = 0; i<dict.count; i++)
{
    NSString *key = keys[i];
    NSString *object = dict[key];
    NSLog(@"%@ = %@", key, object);
}

2)

[dict enumerateKeysAndObjectsUsingBlock:
 ^(id key, id obj, BOOL *stop) {
     NSLog(@"%@ - %@", key, obj);
     
     // *stop = YES;
 }];
}

5.NSMutableDictionary

1)创建可变的字典

NSMutableDictionary *dict = [NSMutableDictionary dictionary];

2)添加键值对

[dict setObject:@"jack" forKey:@"name"];
[dict setObject:@"北京" forKey:@"address"];

3)移除键值对

[dict removeObjectForKey:<#(id)#>];
NSLog(@"%@", dict);

6.数组与字典的混合使用

NSArray *persons = @[
                     @{@"name" : @"jack", @"qq" : @"432423423", @"books": @[@"5分钟突破iOS编程", @"5分钟突破android编程"]},
                     @{@"name" : @"rose", @"qq" : @"767567"},
                     @{@"name" : @"jim", @"qq" : @"423423"},
                     @{@"name" : @"jake", @"qq" : @"123123213"}
                     ];   //数组里有字典,字典里面有词典

NSDictionary *jim = persons[2]; NSLog(@"%@", jim);表示jim所在的那个字典

NSString *bookName = persons[0][@"books"][1];      NSLog(@"%@", bookName); 先取数组0位置对应的字典,再取出自带里book数组的第2本书

NSArray *array = persons[0][@"books"];      NSLog(@"%@", array);  将书全部放在arry数组里面

NSLog(@"%@", persons[1][@"qq"]);    先取出1位置对应的字典,再取出字典中qq这个key对应的数据

集合的总结:

集合

1)NSArray\NSMutableArray

* 有序

* 快速创建(不可变):@[obj1, obj2, obj3]

* 快速访问元素:数组名[i]

2)NSSet\NSMutableSet

* 无序

3)NSDictionary\NSMutableDictionary

* 无序

* 快速创建(不可变):@{key1 : value1,  key2 : value2}

* 快速访问元素:字典名[key]


八、NSNumber

OC中的NSNumber就是一般数据类型的类,它可以将一般数剧类型包装成对象。

1.将基本数据类型转为NSNumber

NSNumber *num = [NSNumber numberWithInt:10];
int=[num intValue];

NSNumber *n = [NSNumber numberWithDouble:10.5];
int d = [n doubleValue];

2.数据转为NSString

int a=20;
NSString *str = [NSString stringWithFormat:@"%d", a];   这将20转为@"20" 即数据转为string

NSLog(@"%d", [str intValue]);

3.快速转为NSNumber

将各种基本数据类型包装成NSNumber对象

@10.5;

@YES;

@'A';      注意:@"A"; 它是 NSString对象

age变量包装成NSNumber对象

int age = 100;

@(age);或者[NSNumber numberWithInt:age];

九、NSDate

OC中将日期也封装成一个NSDate类,是它是一个日期时间类.

1.创建一个时间对象

NSDate *date = [NSDate date];

打印出的时候是0时区的时间(北京-8区)

NSLog(@"%@", date);

NSDate *date2 = [NSDate dateWithTimeInterval:5 sinceDate:date]; //表示从运行到此行代码时间5秒钟后的时间

2. 1970开始走过的秒数

NSTimeInterval seconds = [date2 timeIntervalSince1970];

3 .日期的格式

可以改变日期的格式

NSDate *date = [NSDate date]
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
// y 年  M 月  d 日
// m 分 s 秒  H (24)时  h(12)时
formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";
NSString *str = [formatter stringFromDate:date];
NSLog(@"%@", str);

4.将字符转成日期

NSString *time = @"2011/09/10 18:56";
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @"yyyy/MM/dd HH:mm";
NSDate *date = [formatter dateFromString:time];
NSLog(@"%@", date);

十、NSValue

NSNumber之所以能包装基本数据类型为对象,是因为继承了NSValue

1.结构体转为NSValue对象

CGPoint p = CGPointMake(10, 10);

将结构体转为Value对象

NSValue *value = [NSValue valueWithPoint:p];

2.将value转为对应的结构体

[value pointValue];
NSArray *array = @[value ];

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值