[黑马程序员]16[Foundation框架]学习应用,计算学习代码量
来源:互联网 发布:c语言经典第五版pdf 编辑:程序博客网 时间:2024/05/16 12:45
------- android培训、java培训、IOS培训、期待与您交流! ----------
[Foundation框架]学习应用,计算学习代码量
代码量是标志着一个好的程序员对自我的学习约束,那么怎么检查我们每天的代码量呢.首先得熟练掌握Foundation框
架里的两个常用类NSString与NSArray
01. NSString
// 1.NSString
// NSString :不可变字符串
// NSMutaleString :可变字符串
// 2.NSMutableString
// 3.
// NSArray
// ->NSMutableArray
//
// NSSet
// ->NSMutableSet
//
// NSDictionary
//->NSMutableDictionary
// 这三个类称为集合类,可以装很多东西
// NSArray OC中的数组集合类
// OC数组只能存放OC对象,不能存放非OC对象对象,比如int,struct,enum等
int test3()
{
NSMutableString *s1 = [NSMutableStringstringWithFormat:@"age is 10"];
// 拼接内容到s1的后面,直接对s1进行修改操作
[s1 appendString:@" 11 12"];
// 删除指定字符串通用写法
NSRange range = [s1rangeOfString:@"is"];
[s1 deleteCharactersInRange:range];
// s2并不支持直接拼接修改操作,这就是不可变字符串
NSString *s2 = [NSStringstringWithFormat:@"age is 10"];
// 这种拼接方法是新建一个字符串来储存s2的内容(复制内容),并在后面接上新增内容,对s2没有做修改
NSString *s3 = [s2stringByAppendingString:@" 11 12"];
NSLog(@"s1=%@, s2=%@",s1,s2);
return0;
}
int test2()
{
// 字符串的导出
[@"jack\njack"writeToFile:@"/users/apple/desktop/2.txt"atomically:YESencoding:NSUTF8StringEncodingerror:nil];
NSString *str =@"2342344";
NSURL *url = [NSURLfileURLWithPath:@"/users/apple/desktop/2.txt"];
[str writeToURL:url atomically:YESencoding:NSUTF8StringEncodingerror:nil];
return0;
}
int test()
{
NSString *s1 =@"42343444";
NSString *s2 = [[NSStringalloc] init];// 没人这样写
NSString *s3 = [[NSStringalloc] initWithFormat:@"age is %d",10];
// c字符串 -> OC字符串
NSString *s4 = [[NSStringalloc] initWithUTF8String:"jack"];
constchar *cs = [s4 UTF8String];
// NSUTF8StringEncoding用到中文就可以用这种编码
NSString *s5 = [[NSStringalloc] initWithContentsOfFile:@"/users/apple/Desktop/1.txt"encoding:NSUTF8StringEncodingerror:nil];
// NSLog(@"%@",s5);
// URL :资源路径
// 协议头: //路径
// file: //
// ftp://
// http://baidu.com/a.png
// 万能写法,URL的路径资源寻址方式是万能的,部分不是utf8编码的无法用这种方式编码
NSURL *url = [[NSURLalloc] initWithString:@"file:///users/apple/desktop/1.txt"];
NSString *s6 = [[NSStringalloc] initWithContentsOfFile:urlencoding:NSUTF8StringEncodingerror:nil];
// NSLog(@"%@",s6);
// 更常用的方法,使用封装好的
[NSStringstringWithFormat:@"file:///users/apple/desktop/1.txt"];
NSString *s7 = [[NSStringalloc] initWithContentsOfFile:urlencoding:NSUTF8StringEncodingerror:nil];
// 一般都会有一个类方法跟对象方法配对
// [NSURL URLWithString:<#(NSString *)#>];
// [NSString stringWithFormat:@""];
// [NSString stringWithContentsOfFile:<#(NSString *)#>encoding:<#(NSStringEncoding)#> error:<#(NSError *__autoreleasing*)#>];
NSURL *url2 = [NSURLfileURLWithPath:@"file:///users/apple/desktop/1.txt"];
return0;
}
02. NSArray
// NSArray :不可变数组 NSMutableArray :可变数组
// NSArray的遍历
int main()
{
Person *p = [[Personalloc] init];
NSArray *array =@[p, @"jack",@"rose"];
// 1.这种写法比起for(inti=0;i<arrar.count;i++)要简单
// id obj代表着数组中得每一个元素
// int i =0;
// for (id obj in array)
// {
// // 1.找出obj元素在数组中的位置
//// NSUInteger i = [array indexOfObject:obj];
//// NSLog(@"%ld - %@",i,obj);
//
// // 2.遍历
// NSLog(@"%@",obj);
// }
// 2.数组遍历的另一种方式
// enumerateObjectsUsingBlock每遍历到一个元素,就会调用一次block
// 并且当前元素和索引位置当做参数传给block
[array enumerateObjectsUsingBlock:
^(id obj,NSUInteger idx, BOOL *stop)// *stop是停止遍历用的
{
NSLog(@"%ld - %@",idx, obj);
if (idx == 0) {
// 停止遍历
*stop = YES;
}
}];
// 上面的enumerateObjectsUsingBlock遍历方式等同于
void (^myblock)(id,NSUInteger, BOOL *) = ^(id obj,NSUInteger idx, BOOL *stop)// *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);
if (isStop) {
break;
}
}
return0;
}
//int test4()
//{
// // 1.NSArray的创建
// //这个array永远是空数组
// // NSArray *array = [NSArray array];
//
// NSArray *array2 = [NSArrayarrayWithObject:@"jack"];
//
// NSArray *array3 = [NSArrayarrayWithObjects:@"jack",@"rose", nil];
//
// //NSArray *array4 = [NSArrayarrayWithObjects:@"",@"",@"", nil];
// //快速创建一个NSArray对象
// NSArray *array4 =@[@"jack",@"rose",@"123413"];
//
// // 2.NSArray的元素个数
// [array2 count];
// // array2.count;
//
// NSLog(@"%ld",array3.count);
//
// // 3.NSArray中元素的访问
// //NSLog(@"%@",[array3objectAtIndex:1]);
// NSLog(@"%@",array3[0]);
//
// return 0;
//}
//
// main.m
// NSMultableArray
//
// Created by apple on 15-4-12.
// Copyright (c) 2015年apple. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "Person.h"
int main2()
{
// @[]只创建不可变数组NSArray, NSArray并没有addobject方法
NSMutableArray *array =@[@"jack",@"rose"];// 错误写法,
[array addObject:@"jim"];
return0;
}
// 可变数组的基本使用
int main1()
{
NSMutableArray *array = [NSMutableArrayarrayWithObjects:@"rose",@"jim",nil];
[array addObject:[[Person alloc] init]];
[array addObject:@"jack"];
// 错误写法[array addObject:nil];
// 删除元素
// 删除全部
//[array removeAllObjects];
// 删除指定对象
//[array removeObject:@"jack"];
// 还有很多别的方法,晚点看下PPT跟着敲一下
[array removeObjectAtIndex:0];
NSLog(@"%@",array);
NSLog(@"%ld",array.count);
return0;
}
03. 计算代码量
用递归,NSString和Array这两个类,加一个新类来解决
考察NSString,NSArray的使用
*NSfileManager新类
用函数来封装计数功能
1.首先计算单个文件的代码行数
path: 文件的全路径
返回值 int 代码行数
NSUIntegercodeLineCount(NSString *path)
{
// 1.加载文件内容
NSString *content = [NSStringstringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
// NSLog(@"%@",content);
// 2.利用某种分隔符将字符串分割,放进数组(componentsSeparatedByString函数)
NSArray *array = [contentcomponentsSeparatedByString:@"\n"];
// for (NSString *line in array) {
// NSLog(@"%@",line);
// }
return array.count;
}
int main1()
{
NSUInteger count = codeLineCount(@"/Users/apple/Desktop/代码/传智播客作业跟进代码/作业跟进代码/08-作业/main.c");
NSLog(@"count=%ld",count);
return0;
}
// 2.计算文件夹内所有文件行数和
// path :文件全路径(可能是文件,也可能是文件夹)
// 返回值int : 代码行数
// 封装计算功能代码
NSUInteger codeLineCount(NSString *path)
{
int count =0;
// 1.获得文件管理者
NSFileManager *mgr = [NSFileManagerdefaultManager];
// 2.判断path是文件夹还是文件
BOOL dir =NO; // 标记是否为文件夹
BOOL exist = [mgrfileExistsAtPath:path isDirectory:&dir];
// 3.如果文件不存在,直接返回0
if (!exist) {
return 0;
}
// 4.路径存在
if (dir) {
//NSLog(@"是个文件夹");
NSArray *array = [mgr contentsOfDirectoryAtPath:patherror:nil];
NSLog(@"%@",array);
// 遍历数组中得所有文件(夹)
for (NSString *filename in array) {
// 子路径(夹)的全路径
NSString *fullPath = [NSString stringWithFormat:@"%@/%@",path,filename];
// 累加每个子路径的代码行数
count += codeLineCount(fullPath);
}
return count;
}
else{
//NSLog(@"是个文件");
// 5.判断文件的拓展名
NSString *extension = [[path pathExtension]lowercaseString]; // 强制转换为小写,用来满足大小写
if (![extension isEqualToString:@"h"]
&&![extension isEqualToString:@"c"]
&&![extension isEqualToString:@"m"])
{
//文件拓展名不是我们需要计算的
return 0;
}
// 计算当前文件行数
NSString *content = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncodingerror:nil];
NSArray *array = [content componentsSeparatedByString:@"\n"];
// for (NSString *line in array) {
// NSLog(@"%@",line);
// }
return array.count;
}
}
int main()
{
NSUInteger count =codeLineCount(@"/Users/apple/Desktop/代码");
NSLog(@"%ld",count);
return0;
}
- [黑马程序员]16[Foundation框架]学习应用,计算学习代码量
- 黑马程序员_OC中的Foundation框架学习
- 黑马程序员- IOS学习笔记-Foundation框架
- 黑马程序员---OC基础---Foundation框架学习
- 黑马程序员---学习笔记24:Foundation框架
- 黑马程序员-----Foundation框架学习之NSString
- 黑马程序员-----Foundation框架学习之NSMutableString
- [黑马程序员]15[Foundation框架] Foundation部分学习笔记小结
- 黑马程序员-----Foundation框架学习之NSArray学习
- 黑马程序员-----Foundation框架学习之Copy学习
- 黑马程序员_OC学习之Foundation框架1
- 黑马程序员_OC学习之Foundation框架2
- 黑马程序员学习笔记-OC之foundation框架
- 黑马程序员---Objective-C Foundation框架学习笔记之二
- 黑马程序员--IOS学习日记:11--Foundation框架
- 黑马程序员--IOS入学学习--10-Foundation框架1
- 黑马程序员--IOS入学学习--11-Foundation框架2
- 黑马程序员-IOS学习笔记(十二)Foundation框架
- [黑马程序员]12[OC语言]OC基本语法部分学习笔记总结
- [黑马程序员]13[OC语言]OC三大特性部分学习笔记总结
- [黑马程序员]14[OC语言]OC内存管理部分学习笔记总结
- [黑马程序员]15[Foundation框架] Foundation部分学习笔记小结
- 【Android语音合成TTS】国内主流引擎对比
- [黑马程序员]16[Foundation框架]学习应用,计算学习代码量
- search - binary search/sort tree
- 北京市朝阳区第二中级人民法院服务电话是多少
- Codeforces Round #299 (Div. 1) 解题报告 (AB)
- 【Android语音合成TTS】百度语音接入方法,和使用技巧详解
- 【Android语音合成TTS】云知声离线TTS使用详解
- 你必须知道的25个C#基础概念
- 第二个项目(第6210小时时进行)
- 配置jdk和Tomcat