黑马程序员_Foundation框架

来源:互联网 发布:网络电影众筹 编辑:程序博客网 时间:2024/06/06 08:43
---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------

 

 

Foundation框架:

 
Foundation框架很常用,开发中几乎都需要用到,所以对这个框架稍微总结一下。对于常用的结构体和类分开说一下会比较好理解的:
 
foundation常用结构体有这些:
 
NSRange   NSPoint(CGPoint坐标)   NSSize   NSRect
 
NSRange r = NSMakeRage(location, length) // 后面的是函数
 

把结构体转换成字符串可以这么做:
 
CGPoint p = CGPointMake(10, 54);
NSString *str = NSStringFormPoint(p);
 
NSString *str = @"ii love oc"; // 查找某个字符串的范围
 
NSRange range = [str stringOfString:@"ve o"];
 

NSLog(@"loc = &ld, length = %ld",range.location, range.length)
 
注意:函数名:CGPointMake(可以跨平台,尽量使用)  或者  NSMakePoint
 
如果找不到字符串的话,length = 0, location = NSNotfound = -1;
 

CGRect r1 = CGRectMake(0, 0, 100 ,193); // 第一二参数是CGPoint,后面的是size
 
参数亦可:CGRect r1 = CGRectMake{{0, 0}, {100 ,193}};
 
 CGRect r1 = CGRectMake(p1, s1); // 里面的参数代表结构体
 
 坐标是0的时候可以:CGPointZero
 
使用CG而不是NS的时候,要添加框架进去,不是#import,而是在xcode里面设置添加
 
 
 
常用的foundation类有这些:
 
NSString   // 数组用 @[]

NSArray    // 这四个只能存放oc对象,不能放基本数据类型。比如@{10}×

NSSet (加上Mutable可变)       // 无论是数组还是字典,快速创建的都只能是父类,子类不能快速创建
NSDictionary    // 字典用 @{}

NSNumber / NSValue  // @后面跟上一个数字,自动变成[NSNumber numberWithInt:4]对象
NSDate
 
这些都是固定的不可变的,如果变成NSMutableString(加上Mutable)则是可变,其他都是一样
 

 
NSString:
 

是可以(写入)读取文件:(可以对中文进行编码转换)尽量用URL这个方式读取文件即下面的file换成URL
 
NSString *cs = [NSString alloc] initWithContentsOfFile:@"文件的绝对路径" encoding:
 
NSUTF8StringEncoding error: nil];
 
NSUTF8StringEncoding  用到中文就可以这样编码
 
NSMutableString可变字符串:
 
 // 创建对象后,可以对这个对象增加和删除字符:
[s appendString:@"内容"];删除换成delete
 
注意:创建对象的时候可以不用写alloc init,可以直接调用类方法,因为是返回一个对象的:
 
[[NSString alloc] initWithFormat:@""];可换成[NSString stringWithFormat:@""];一般类方法名都是和类名相同的
 
查看一下字符串里面的每一个元素(面向对象的思想):
 [content characterAtIndex:(NSUInteger(整数))];
 
数有多少行:更好用的是把代码分割成很多块,标记是\n,返回的是一个数组对象

 NSArray * array = [content componentsSeparatedByString:@"\n"];
 
 return array.count; // 这里返回一个int的就可以了
 
 
 
 
NSArray
 
 
OC数组只能存放OC对象,不能存放非OC对象,不能存放空值
 
创建oc数组:NSArray *a = [NSArray arrayWithObject:@"sdljfef"]; // 加上s就是可以传很多对象
 
快速创建数组:NSArray *a = @[]; // @就是创建NSArray对象的快捷方式,中括号里面写对象就好
 
这个快速创建数组的方法“@[]”不适用于NSMutableArray这个数组
 
读取的时候:两种方法

 1 [array objectAtIndex:1]; // 读取第二个对象

 2 array[1]; // 这是编译器的特性,会自动转换成上面的方法,以后用这个
 
遍历OC对象的数组:
 
1 for(int i = 0; i < array.count; i++){NSLog(@"%@", array[i]);} 2(快速遍历)for(id obj in array){NSUInteger i = [array indexOfObject:obj];NSLog(@"%ld - %@",i, obj);}3[array enumerateObjectUsingBlock:^(id obj, NSUInteger idx, BOOL *stop){NSLog(@"%ld - %@",idx, obj)}];第三种方法的本质是:void [^myBlock](id, NSUInteger, BOOL*) = ^(id obj, NSUInteger idx, BOOL *stop){NSLog(@"%ld - %@",idx, obj);if(idx = 0){*stop = YES;}}for(int i = 0; i < array.count; i++){BOOL isStop = NO;id obj = array[i];myBlock(obj, i, &isStop); // 用指针才会改变stop的值,否则是值传递if(isStop){break;}}

 
NSFileManager这个类是只能创建一个对象,调用多少次都是只有一个对象,方式:
 
 // 获取文件管理者
NSFileManager * mgr = [NSFileManager defaultManager];
 
判断一个路径是文件还是文件夹:
 
BOOL dir = NO; // 默认是NO
[mgr fileExistsAuPath:路径 isDirectory:BOOL*];
 
 

NSSet
 
这个是没有顺序的,用法和NSArray相似
 
创建一个NSSet:NSSet *s = [NSSet setWithObject:@"字符串"];
 
调用的时候:NSString *str = [s anyOject]; // 只能随机拿数组的元素
 
 
 
NSDictionary:

 创建:NSDictionary *dict = @{索引@"" :内容@"";索引 :内容};
 
 
 
NSNumber / NSValue
 
NSNumber是NSValue的子类,前者只能让数字和字符和BOOL包装成对象,本质是依赖于父类的方法;后者可以把结构体等等基本数据类型包装成对象。
 
 
 
 
NSDate
 
// 这个是DATE转成字符串的形式// 显示当前(执行这个代码)的时间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];
 
Foundation框架还有很多内容需要我们主动去学习,里面提供很多丰富的方法需要开发者去感受,上面列举的只是常用的一部分,还有很多很多需要我们自己去挖掘。加油,我相信我们是可以的。

 
---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------详细请查看:www.itheima.com
0 0