【黑马程序员】---Foundation框架总结01
2015-03-15 11:30
295 查看
------- android培训、java培训、期待与您交流! ----------
Foundation框架总结---(01)
NSRange的原型为:
心得体会:由此可见,NSRange是一个结构体,它由location和length两个成员组成。
心得体会:-1如果按照无符号整型打印输出是一大串数字
心得体会:CGPointMake 和 NSMakePoint是一样的。
其它重点函数用法:
(1)比较两个点是否相同(x、y)
(1)学习结构体的API,一定要会对比学习,很多函数以及用法都是能猜出来的。
(2)比如CGPoint等同于NSPoint,但一般都用以CG开头的,因为它跨平台。
(3)CGPointZero == CGPointMake(0, 0),它表示原点,用处较多。
(4)使用这些CGPointEqualToPoint、CGRectContainsPoint等函数的前提是添加CoreGraphics框架。
1> 创建字符串的第一种方式
2> 创建字符串的第二种方式
将C语言字符串转换成OC字符串
将OC字符串转换成C语言字符串
NSUTF8StringEncoding 用到中文就可以用这种编码
URL : 资源路径
协议头://路径
file:// ftp://
创建文件URL的2种方式:
8> 创建字符串的第八种方式
字符串导出的2种方式:
(1)写到文件中
(2)写到指定的URL中
(1)在创建字符串时,一般都会有一个类方法跟对象方法配对,并且在日常写代码时,最好用类方法,简单。
(2)在学习Foundation框架时,要注意对比学习,很多东西都是相通的。
(3)这些API不用刻意去记忆,平时多敲代码多积累。
(1)首先,要知道计算一个文件行数的方法。然后,再利用递归,计算一个文件夹下所有文件的行数。
(2)注意这个函数[str componentsSeparatedByString:@"\n"],它是‘、n’将字符串进行切割,然后存储在数组中,求出数组的长度,即可求出单个文件的行数
(3)了解下NSFileManager文件管理者这个类。
Foundation框架总结---(01)
1.结构体
主要讲了一下4个结构体(1) NSRange(location, length)
NSRange是一个结构体,其中location是一个以0为开始的index,length是表示对象的长度。他们都是NSUInteger类型。NSRange的原型为:
typedef struct _NSRange { NSUInteger location; NSUInteger length; } NSRange;
心得体会:由此可见,NSRange是一个结构体,它由location和length两个成员组成。
typedef unsigned long NSUInteger;NSRange的三种赋值方式:
NSRange r1 = {2, 4}; // 不用 NSRange r2 = {.location = 2, .length = 4};// 不用 NSRange r3 = NSMakeRange(2, 4); // 掌握rangeOfString方法:查找某个字符串在字符串的范围。
NSString *str = @"i love oc"; // 如果找不到,length=0,location=NSNotFound==-1 NSRange range = [str rangeOfString:@"java"]; NSLog(@"loc = %ld, length=%ld", range.location, range.length);
心得体会:-1如果按照无符号整型打印输出是一大串数字
(2) NSPoint\CGPoint
NSPoint的原型为:struct CGPoint { CGFloat x; CGFloat y; // 其中x,y是double类型 };NSPoint用法:
//NSPoint指的是位置 NSPoint point; //给结构体里面的点进行赋值 point.x = 10; point.y = 10; //快速创建点 point = NSMakePoint(10, 18); //常见的是CGPointMake创建点的函数 point = CGPointMake(29, 78); NSString* str2 = NSStringFromPoint(point); NSLog(@"point is %@",str2);
心得体会:CGPointMake 和 NSMakePoint是一样的。
(3)NSSize\CGSize
NSSize\CGSize原型:struct CGSize { CGFloat width; CGFloat height; };NSSize用法:
NSSize size; size.width = 100; size.height = 12; size = NSMakeSize(12, 12); size = CGSizeMake(11, 11); NSString* str3 = NSStringFromSize(size); NSLog(@"%@",str3);
(4) NSRect\CGRect (CGPint CGSize)
NSRect\CGRect 的原型:struct CGRect { CGPoint origin; CGSize size; };赋值方式:
CGRect r1 = CGRectMake(0, 0, 100, 50); CGRect r2 = { {0, 0}, {100, 90}}; CGRect r3 = {p1, s2}; // 使用CGPointZero等的前提是添加CoreGraphics框架 CGRect r4 = {CGPointZero, CGSizeMake(100, 90)}; // 表示原点 // CGPointZero == CGPointMake(0, 0)NSMakeRect函数源代码:
NS_INLINE NSRect NSMakeRect(CGFloat x, CGFloat y, CGFloat w, CGFloat h) { NSRect r; r.origin.x = x; r.origin.y = y; r.size.width = w; r.size.height = h; return r; }
其它重点函数用法:
(1)比较两个点是否相同(x、y)
BOOL b = CGPointEqualToPoint(CGPointMake(10, 10), CGPointMake(10, 10));(2)判断一个矩形是否包含一个点
BOOL b2 = CGRectContainsPoint(CGRectMake(50, 40, 100, 50), CGPointMake(60, 45));心得体会:
(1)学习结构体的API,一定要会对比学习,很多函数以及用法都是能猜出来的。
(2)比如CGPoint等同于NSPoint,但一般都用以CG开头的,因为它跨平台。
(3)CGPointZero == CGPointMake(0, 0),它表示原点,用处较多。
(4)使用这些CGPointEqualToPoint、CGRectContainsPoint等函数的前提是添加CoreGraphics框架。
2.NSString
(1)NSString :不可变字符串
字符串的创建1> 创建字符串的第一种方式
NSString *s1 = @"jack";
2> 创建字符串的第二种方式
NSString *s2 = [[NSString alloc] initWithString:@"jack"];3> 创建字符串的第三种方式
NSString *s3 = [[NSString alloc] initWithFormat:@"age is %d", 10];4> 创建字符串的第四种方式
将C语言字符串转换成OC字符串
// C字符串 --> OC字符串 NSString *s4 = [[NSString alloc] initWithUTF8String:"jack"];5> 创建字符串的第五种方式
将OC字符串转换成C语言字符串
const char *cs = [s4 UTF8String];6> 创建字符串的第六种方式
NSUTF8StringEncoding 用到中文就可以用这种编码
NSString *s5 = [[NSString alloc] initWithContentsOfFile:@"/Users/apple/Desktop/1.txt" encoding:NSUTF8StringEncoding error:nil];
URL : 资源路径
协议头://路径
file:// ftp://
创建文件URL的2种方式:
NSURL *url = [[NSURL alloc] in 4000 itWithString:@"file:///Users/apple/Desktop/1.txt"]; NSURL *url = [NSURL fileURLWithPath:@"/Users/apple/Desktop/1.txt"];7> 创建字符串的第七种方式
NSString *s6 = [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];一般都会有一个类方法跟对象方法配对
8> 创建字符串的第八种方式
[NSURL URLWithString:@"file:///Users/apple/Desktop/1.txt"];9> 创建字符串的第九种方式
[NSString stringWithFormat:@"age is %d", 10];10>创建字符串的第十种方式
[NSString stringWithContentsOfFile:@"/Users/apple/Desktop/1.txt" encoding:NSUTF8StringEncoding error:nil];
字符串导出的2种方式:
(1)写到文件中
[@"Jack\nJack" writeToFile:@"/Users/apple/Desktop/my.txt" atomically:YES encoding:NSUTF8StringEncoding error:nil];
(2)写到指定的URL中
NSString *str = @"4234234"; NSURL *url = [NSURL fileURLWithPath:@"/Users/apple/Desktop/my2.txt"]; [str writeToURL:url atomically:YES encoding:NSUTF8StringEncoding error:nil];
(2)NSMutableString : 可变字符串
1>创建可变字符串,并追加内容NSMutableString *s1 = [NSMutableString stringWithFormat:@"my age is 10"]; // 拼接内容到s1的后面 [s1 appendString:@" 11 12"];2>从一个长字符串中删除指定字符串
// 获取is的范围 NSRange range = [s1 rangeOfString:@"is"]; [s1 deleteCharactersInRange:range]; NSString *s2 = [NSString stringWithFormat:@"age is 10"];3>NSString也可以在已有字符串追加字符串,但是它实际上是重新创建了新的字符串
NSString *s3 = [s2 stringByAppendingString:@" 11 12"];心得体会:
(1)在创建字符串时,一般都会有一个类方法跟对象方法配对,并且在日常写代码时,最好用类方法,简单。
(2)在学习Foundation框架时,要注意对比学习,很多东西都是相通的。
(3)这些API不用刻意去记忆,平时多敲代码多积累。
3.写一个函数,计算文件代码的行数,可以是文件也可以是文件夹
#import <Foundation/Foundation.h> // 计算文件的代码行数 /* path : 文件的全路径(可能是文件夹、也可能是文件) 返回值 int :代码行数 */ NSUInteger codeLineCount(NSString *path) { // 1.获得文件管理者 NSFileManager *mgr = [NSFileManager defaultManager]; // 2.标记是否为文件夹 BOOL dir = NO; // 标记是否为文件夹 // 标记这个路径是否存在 BOOL exist = [mgr fileExistsAtPath:path isDirectory:&dir]; // 3.如果不存在,直接返回0 if(!exist) { NSLog(@"文件路径不存在!!!!!!"); return 0; } // 代码能来到着,说明路径存在 if (dir) { // 文件夹 // 获得当前文件夹path下面的所有内容(文件夹、文件) NSArray *array = [mgr contentsOfDirectoryAtPath:path error:nil]; // 定义一个变量保存path中所有文件的总行数 int count = 0; // 遍历数组中的所有子文件(夹)名 for (NSString *filename in array) { // 获得子文件(夹)的全路径 NSString *fullPath = [NSString stringWithFormat:@"%@/%@", path, filename]; // 累加每个子路径的总行数 count += codeLineCount(fullPath); } return count; } else { // 文件 // 判断文件的拓展名(忽略大小写) NSString *extension = [[path pathExtension] lowercaseString]; if (![extension isEqualToString:@"h"] && ![extension isEqualToString:@"m"] && ![extension isEqualToString:@"c"]) { // 文件拓展名不是h,而且也不是m,而且也不是c return 0; } // 加载文件内容 NSString *content = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil]; // 将文件内容切割为每一行 NSArray *array = [content componentsSeparatedByString:@"\n"]; // 删掉文件路径前面的/Users/apple/Desktop/iOS课堂共享/0722课堂共享/ NSRange range = [path rangeOfString:@"/Users/apple/Desktop/iOS课堂共享/0722课堂共享/"]; NSString *str = [path stringByReplacingCharactersInRange:range withString:@""]; // 打印文件路径和行数 NSLog(@"%@ - %ld", str, array.count); return array.count; } } int main() { NSUInteger count = codeLineCount(@"/Users/apple/Desktop/iOS课堂共享/0722课堂共享"); NSLog(@"%ld", count); return 0; }心得体会:
(1)首先,要知道计算一个文件行数的方法。然后,再利用递归,计算一个文件夹下所有文件的行数。
(2)注意这个函数[str componentsSeparatedByString:@"\n"],它是‘、n’将字符串进行切割,然后存储在数组中,求出数组的长度,即可求出单个文件的行数
(3)了解下NSFileManager文件管理者这个类。
相关文章推荐
- 【黑马程序员】---Foundation框架总结02
- 黑马程序员-OC-Foundation框架总结一
- 黑马程序员————OC中Foundation框架知识总结
- 黑马程序员————Foundation框架_知识总结(下)
- ——黑马程序员——OC中Foundation框架NSSArray用法总结
- 黑马程序员_OC_FOUNDATION框架总结
- 黑马程序员—foundation框架总结
- ——黑马程序员——OC中Foundation框架NSString用法总结
- 黑马程序员————Foundation框架_知识总结(上)
- 黑马程序员--Foundation框架总结
- 黑马程序员_Foundation框架01_结构体
- 黑马程序员---回顾之集合框架总结
- 黑马程序员-集合框架总结
- 黑马程序员 集合框架 总结
- 黑马程序员_集合框架总结
- 黑马程序员--07.集合框架--02. 重写HashCode的内存变化过程以及两种重写hashCode方式的比较【个人总结】
- 黑马程序员之java--集合框架总结
- String类总结01-----黑马程序员
- 黑马程序员_01Java基础知识总结
- 黑马程序员技术博客之集合框架总结