[黑马程序员]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) 2015apple. 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;

}

0 0