Foundation---可变与不可变对象

 

/*

 NSString : 不可变字符串

 

 NSMutableString : 可变字符串

 

 */

 

NSString

// OC字符串NSString的创建

void createNSString()

{

    /*

     字符串的创建方式1 ---  对象方法initWithxxx

     */

    NSString *s1 = @"Peak";

    //    NSString *s2 = [[NSString alloc] initWithString:@"Peak"];

    NSString *s3 = [[NSString alloc] initWithFormat:@"Peak"];

    NSString *s4 = [[NSString alloc] initWithFormat:@"name is %@, age is %d", @"Peak", 25];

    // C语言字符串--->OC字符串

    NSString *s5 = [[NSString alloc] initWithUTF8String:"Peak"];

    // OC字符串--->C语言字符串

    char *str= [s5 UTF8String];

    

    // 从文件(绝对路径/)中读取内容,返回OC字符串

    // NSUTF8StringEncoding 用到中文使用这种编码  如果获取不到内容,返回(null) 可以换不同的编码进行尝试

    NSString *s6 = [[NSString alloc] initWithContentsOfFile:@"/Users/Mac/Desktop/a.txt" encoding:NSUTF16StringEncoding error:nil];

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

    // 网络 http://

    // 本地 file://绝对路径  3/

    // ftp://

    NSURL *url = [[NSURL alloc] initWithString:@"http://baidu.com"];

    NSString *s7 = [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];

    

    /*

     字符串的创建方式2 ---  对象方法相应的类方法stringWithxxx

     一般都有一个类方法和对象方法配对

     类方法名一般以类名(类名With)开头

     */

    NSString *s8 = [NSString stringWithFormat:@"Peak"];

    NSString *s9 = [NSString stringWithFormat:@"name is %@, age is %d", @"Peak", 25];

    NSString *s10 = [NSString stringWithContentsOfFile:@"/Users/Mac/Desktop/a.txt" encoding:NSUTF16StringEncoding error:nil];

    NSURL *url2 = [NSURL URLWithString:@"http://sougou.com"];  // NSURL的类方法URLWithxxx

    NSURL *url3 = [NSURL fileURLWithPath:@"/Users/Mac/Desktop/Mac快捷键.txt"];   //  文件名可以有中文

    //    NSURL *url4 = [NSURL URLWithString:@"file:///Users/Mac/Desktop/Mac快捷键.txt"];    // 文件名不能有中文

    NSString *s11 = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];

    NSLog(@"\n%@", s11);   

}

 

// OC字符串NSString写出去(写到文件)

void writeTo()

{

    // OC字符串写到一个文件中,如果该文件不存在,就自动创建该文件

    [@"Hello Peak" writeToFile:@"/Users/Mac/Desktop/a.txt" atomically:YES encoding:NSUTF8StringEncoding error:nil];

    

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

    NSURL *url2 = [NSURL URLWithString:@"file:///Users/Mac/Desktop/a.txt"];    // 文件名有中文不行

    NSString *s = [NSString stringWithContentsOfURL:url2 encoding:NSUTF8StringEncoding error:nil];

    [@"Hello World" writeToURL:url atomically:YES encoding:NSUTF8StringEncoding error:nil];

    

    NSLog(@"%@", s);

 

}

 

 

NSArray(有序)

OC数组NSArray只能存放OC对象,不能存放非OC对象类型,比如int、struct、enum。。。

 

当把一个对象放入数组中,该对象的计数器会+1,也就是说 数组会对该对象做一次retain操作

当数组被销毁时,会自动对里面的所有元素对象做一次release---数组里所有元素的计数器-1

 

/*

 OC数组只能存放OC对象

 

 NSArray : 不可变数组

 

 NSMutableArray : 可变数组

 */

 

void baseUseNSArray()

{

    // NSArray是不可变数组,意味着 a1永远是空数组

    NSArray *a1 = [NSArray array];

    

    // nil是数组元素结束的标记,不能省略

    NSArray *a2 = [NSArray arrayWithObjects:@"Peak", @"heima", nil];

//    NSLog(@"%@", a2[0]);   // a2[1] 编译器会自动转为 [a2 objectAtIndex:1]

    

    // 快速创建一个NSArray对象

    NSArray *array = @[ @"Hello", @"Peak", @"heima"];  // 编译器特性,会自动将代码转换

//    NSLog(@"%@", array);

    

    

    // 遍历数组元素1   id obj代表数组a3中的每一个元素

    for (id obj in array)

    {

        NSUInteger i = [array indexOfObject:obj];   // 返回对象obj在数组array中的索引位置

        NSLog(@"array[%ld] = %@", i, obj);

    }

    

    // 遍历数组元素2 ---推荐使用

    // 每遍历到一个元素,就会 调用 一次block

    // 并且把当前元素和索引位置当做参数传递给block

    [array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop)

    {

//        if (1 == idx) {

//            *stop = YES;

//        }

        *stop = YES// 停止遍历

        NSLog(@"array[%ld] = %@", idx, obj);  // obj为数组每个元素对象, idx为元素索引

        *stop = NO;   // 不停止遍历

    }];

}

 

 

NSDictionary(键值对 排列 无序———直接用@"%@"打印是按照key的abc排序打印 键值对)

void baseUseNSDictionary()

{

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

    

    NSArray *keys = @[@"name", @"address"];

    NSArray *objs = @[@"Peak", @"浙江"];

    NSDictionary *dict2 = [NSDictionary dictionaryWithObjects:objs forKeys:keys];

    

    /* 可读性不好

     NSDictionary *dict3 = [NSDictionary dictionaryWithObjectsAndKeys:

     @"Peak", @"name",

     @"浙江", @"address",

     @"18600000000", @"phone",

     @"Peak", @"name2",

     @"浙江", @"address2",

     @"18600000000", @"phone2",

     nil];

     */

    // 编译器特性: 快速创建 一个NSDictionary对象

    NSDictionary *dict3 = @{@"name": @"Peak",

                            @"address": @"浙江"};

    // 编译器特性:  快速访问某个键值对(快速根据一个key访问相应的object

    id obj = dict3[@"name"];   // 编译器会自动转为---等价于 [dict3 objectForKey:@"name"]

    

    NSLog(@"%@", dict3);

    NSLog(@"%@", obj);

    NSLog(@"%@", [dict3 objectForKey:@"address"]);

 

    // NSMutableDictionary的使用

    NSMutableDictionary *dict = [NSMutableDictionary dictionary]; 

    // 添加键值对

    [dict setObject:@"Peak" forKey:@"name"]; 

    NSLog(@"%@", dict);

}

 

 

Foundation---集合类总结

 

1. NSArray\NSMutableArray

 * 有序

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

 * 快速访问元素  数组对象名[i];

 

 2. NSSet\NSMutableSet

 * 无序

 

 3. NSDictionary\NSMutableDictionary

 * 无序

 * 快速创建(不可变)   @{key1 : object1,  key2 : object2, …...}; 

 * 快速访问元素    字典对象名 key]; 

posted on 2015-04-08 09:54  我是一匹小黑马  阅读(159)  评论(0编辑  收藏  举报