黑马程序员——ios开发基础之OC中的Foundation框架(一)

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

前言   Foundation介绍

       框架是由许多类、方法、函数、文档按照一定的逻辑组织起来的集合,以便使研发程序变得更容易在OS X下的Mac操作系统中大约有80个框架为所有程序开发奠定基础的框架称为Foundation框架
      Foundation框架的作用
        Foundation框架是Mac\iOS中其他框架的基础
        Foundation框架包含了很多开发中常用的数据类型:
               结构体、枚举、类 
     使用Foundation框架
     使用Foundation框架中的功能,包含它的主文件即可
      #import  

一、NSString介绍及基本使用

        一个NSString对象就代表一个字符串(文字内容)
       一般称NSString为字符串类
     NSString的创建方式
          1) 最直接的方式(这是常量字符串)
                 NSString *str = @"abc";
                 NSString *st3 = @"abc";
                 注意这种写法,字符串存储在内存的常量区
         2) 格式化的方式
                 NSString *st2 = [NSString stringWithFormat:@"%@", @"jack"];
              注意这种写法,字符串存储在内存的堆区(地址不一样)
         3) 从文件中读取
         4) 从URL中读取
                 传入完整的字符串创建
                  NSURL *url = [NSURL URLWithString:@"file:///Users/apple/Desktop/str.txt"];
                 通过文件路径创建(默认就是file协议的)
                  NSURL *url = [NSURL fileURLWithPath:@"/Users/apple/Desktop/str.txt"];

3. NSString的常见方法:

       - (NSString *)uppercaseString;
          全部字符转为大写字母
       - (NSString *)lowercaseString
          全部字符转为小写字母
       - (NSString *)capitalizedString
       首字母变大写,其他字母都变小写。如果一个句子中有多个单词,那么会将每个单词的首字母变成大写,其余字母变成小写
      - (BOOL)isEqualToString:(NSString *)aString;
          两个字符串的内容相同就返回YES, 否则返回NO
         注意: == 比较的是两个对象的地址是否相同, 不是字符串内容
        - (NSComparisonResult)compare:(NSString *)string;
            这个方法可以用来比较两个字符串内容的大小
            比较方法: 逐个字符地进行比较ASCII值,返回NSComparisonResult作为比较结果
             NSComparisonResult是一个枚举,有3个值:
             如果左侧 > 右侧,返回NSOrderedDescending,    -1
             如果左侧 < 右侧,返回NSOrderedAscending,        1
             如果左侧 == 右侧返回NSOrderedSame                0
       - (NSComparisonResult) caseInsensitiveCompare:(NSString *)string;
           忽略大小写进行比较,返回值与compare:一致
       - (BOOL)hasPrefix:(NSString *)aString;
                     是否以aString开头
       - (BOOL)hasSuffix:(NSString *)aString;
                   是否以aString结尾
       - (NSRange)rangeOfString:(NSString *)aString;
             用来检查字符串内容中是否包含了aString
            如果包含, 就返回aString的范围
            如果不包含, NSRange的location为NSNotFound, length为0
          反方向搜索:[str rangeOfString: @”str” options: NSBackwardsSearch]; // 从后向前搜索
            - (NSString *)substringFromIndex:(NSUInteger)from;
                    从指定位置from开始(包括指定位置的字符)到尾部
            - (NSString *)substringToIndex:(NSUInteger)to;
               从字符串的开头一直截取到指定的位置to,但不包括该位置的字符
            - (NSString *)substringWithRange:(NSRange)range;
                  按照所给出的NSRange从字符串中截取子串
            - (NSString *)stringByReplacingOccurrencesOfString:(NSString *)targetwithString:(NSString *)replacement;
                   用replacement替换target
            - (NSUInteger)length;
              返回字符串的长度(有多少个字符,无论中文字符、英文字符等等,一个字符就是一个字符)
           - (unichar)characterAtIndex:(NSUInteger)index;
              返回index位置对应的字符
              字符串转为基本数据类型
           - (double)doubleValue;
           - (float)floatValue;
           - (int)intValue;
           - (char *)UTF8String; // 在操作SQLite数据库时才会用到
              转为C语言中的字符串。
           以后可能会用到别人的框架,都是纯C语言的,所以可能会用到把OC字符串转换为C语言的字符串。
            /** 参考代码:
                C语言字符串:
                    char *name = “steve”;
                    NSString *s1 = @"123”;
                   char *s2 = s1.UTF8String;
                   printf("%s", s2);
              */
                 去除所有的空格
               [str stringByReplacingOccurrencesOfString:@" " withString:@""]
               去除首尾的空格
               [str stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
4、 NSString的不可变性
         NSString *s1 = @"aa"; s1 = @"bb"; 
          // 这种情况只是指针变量s1 重新指向了, 分配好的字符串空间中的内容并没有发生改变。
            为什么要有NSMutableString? 因为如果使用NSString进行字符串拼接的时候, 会产生大量
              垃圾内存, 创建很多无用的对象, 浪费内存, 消耗cpu性能。
5 、应用:字符拼接
NSString *substr = @"itcast";
NSMutableString *destStr = [NSMutableString string];
for (int i = 0; i<10; i++) {
// if (i != 0) {
if (i) { // 只有i不等于
[destStr appendString:@" "];
}
[destStr appendString:substr];
}

二、Array

          C语言中数组的弊端, int array[4] = {10, 89, 27, 76};
          只能存放一种类型的数据.(类型必须一致)
          不能很方便地动态添加数组元素、不能很方便地动态删除数组元素(长度固定)
1> NSArray的创建方式:
       + (instancetype)array;
       + (instancetype)arrayWithObject:(id)anObject;
       + (instancetype)arrayWithObjects:(id)firstObj, ...;
       + (instancetype)arrayWithArray:(NSArray *)array;
          @[item1, item2, item3, ......];
          --------------- 根据文件来创建 ----------------
       + (id)arrayWithContentsOfFile:(NSString *)path; // 读取一个xml文件.
       + (id)arrayWithContentsOfURL:(NSURL *)url; // 读取一个xml文件.
2> NSArray的特点:
           只能存放任意OC对象, 并且是有顺序的
           不能存储非OC对象, 比如int\float\double\char\enum\struct等
           它是不可变的, 一旦初始化完毕后, 它里面的内容就永远是固定的, 不能删除里面的元素, 也不能再往里面添加元素
            NSArray直接使用NSLog()作为字符串输出时是小括号括起来的形式。
            NSArray中不能存储nil,因为NSArray认为nil是数组的结束(nil是数组元素结束的标记)。nil就是0。0也是基本数据类型,不               能存放到NSArray中。
                 nil Nil NULL [NSNULL null];
            NSArray *array = [NSArray array]; // 这样的数组永远是空的,不可能向其中增加值。(不可变性)
3> NSArray的常见方法:
         - (NSUInteger)count;
             获取集合元素个数
         - (id)objectAtIndex:(NSUInteger)index;
            获得index位置的元素, 等价于array[index];
         - (BOOL)containsObject:(id)anObject;
             是否包含某一个元素
         - (id)lastObject;
             返回最后一个元素
         - (id)firstObject;
             返回第一个元素
        - (NSUInteger)indexOfObject:(id)anObject;
           查找anObject元素在数组中的位置(如果找不到,返回-1)NSNotFound
        - (NSUInteger)indexOfObject:(id)anObject inRange:(NSRange)range;
              在range范围内查找anObject元素在数组中的位置
        - (void)makeObjectsPerformSelector:(SEL)aSelector;
        - (void)makeObjectsPerformSelector:(SEL)aSelector withObject:(id)argument;
4> NSArray遍历元素
          遍历, 就是将NSArray里面的所有元素一个一个取出来查看
          常见的遍历方式有
          普通遍历
           for (int i = 0; i
          快速遍历
           for (id obj in array) { }
           Block遍历
           [array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
            }];
5> 将一个NSArray保存到文件中
          - (BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile;
          - (BOOL)writeToURL:(NSURL *)url atomically:(BOOL)atomically;
         注意: 目前这里只支持NSArray中保存字符串、Dictionary或一写OC对象的数字类型写入文件。(其他类型需要用到NSCoding协议)
6> 字符串拼接, 字符串(NSString)的方法:
            - (NSString *)componentsJoinedByString:(NSString *)separator;
           这是NSArray的方法, 用separator作拼接符将数组元素拼接成一个字符串
7> 字符串分割, 数组(NSArray)的方法:
            - (NSArray *)componentsSeparatedByString:(NSString *)separator;
            这是NSString的方法, 将字符串用separator作为分隔符切割成数组元素
8> NSMutableArray的特点:
             NSMutableArray是NSArray的子类
             NSMutableArray是可变的, 随时可以往里面添加\更改\删除元素, NSArray是不可变的, 一旦初
             始化完毕后, 它里面的内容就永远是固定的, 不能删除里面的元素, 也不能再往里面添加元素
             创建一个空的NSMutableArray: NSMutableArray *array = [NSMutableArray array];
9> NSMutableArray的常见方法:
          - (void)addObject:(id)object;
              添加一个元素
         - (void)addObjectsFromArray:(NSArray *)array;
               添加otherArray的全部元素到当前数组中
        - (void)insertObject:(id)anObject atIndex:(NSUInteger)index;
                  在index位置插入一个元素
        - (void)removeLastObject;
                  删除最后一个元素
        - (void)removeAllObjects;
                 删除所有的元素
        - (void)removeObjectAtIndex:(NSUInteger)index;
                删除index位置的元素
        - (void)removeObject:(id)object;
                删除特定的元素
        - (void)removeObjectsInRange:(NSRange)range;
                删除range范围内的所有元素
        - (void)replaceObjectAtIndex:(NSUInteger)index withObject:(id)anObject;
           用anObject替换index位置对应的元素, 等价于array[index] = anObject;
        - (void)exchangeObjectAtIndex:(NSUInteger)idx1 withObjectAtIndex:(NSUInteger)idx2;
                   交换idx1和idx2位置的元素
         注意: @[item1, item2, item3]这种方式创建的数组永远都是不可变的NSArray。

三、NSDictionary

1> NSDictionary是不可变的, 一旦初始化完毕, 里面的内容就无法修改
2> NSDictionary是以"键值对"的方式来保存数据。
3> NSDictionary的创建方式:
         + (instancetype)dictionary;
         + (instancetype)dictionaryWithObject:(id)object forKey:(id )key; //objectForKey,根据键取值。
         + (instancetype)dictionaryWithObjectsAndKeys:(id)firstObject, ...;
          @{@"zs" : @"zhangsan", @"ls" : @"lisi", @"ww" : @"Wangwu"};
4> NSDictionary的常见方法:
         - (NSUInteger)count;
         返回字典的键值对数目
         - (id)objectForKey:(id)aKey;
         根据key取出value, 等价于: dict[aKey];
         快速遍历
              for (NSString *key in dict) { }
          Block遍历
           [dict enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
           }];
          注意: 字典遍历的顺序是不一定的。
5> 将字典中的内容写入到文件:
             将字典写入文件中
            - (BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile;
            - (BOOL)writeToURL:(NSURL *)url atomically:(BOOL)atomically;
     将文件中的数据读取到字典中:
            + (id)dictionaryWithContentsOfFile:(NSString *)path;
            + (id)dictionaryWithContentsOfURL:(NSURL *)url;
       注意: 字典中的键不要重复。(虽然重复也不报错,会自动取在前面的那个)
6> NSMutableDictionary
            NSMutableDictionary是NSDictionary的子类
            NSDictionary是不可变的, 一旦初始化完毕后, 它里面的内容就永远是固定的, 不能删除里面的元素, 也不能再往里面添加元素
            NSMutableDictionary是可变的, 随时可以往里面添加\更改\删除元素
7> NSMutableDictionary的常见操作
           - (void)setObject:(id)anObject forKey:(id )aKey;
               添加一个键值对(会把aKey之前对应的值给替换掉), 等价于: dict[@"name"] = @"Jack";
           - (void)removeObjectForKey:(id)aKey;
                   通过aKey删除对应的value
            - (void)removeAllObjects;
                    删除所有的键值对
          //通过dictionary属性快速初始化一个NSMutableDictionary
           dict.dictionary = @{@"name" : @"bob", @"age" : @"18"};
8> 总结
         NSArray和NSDictionary的区别
         1> NSArray是有序的,NSDictionary是无序的
         2> NSArray是通过下标访问元素,NSDictionary是通过key访问元素
    NSArray的用法
          1> 创建
          @[@"Jack", @"Rose"] (返回是不可变数组)
          2> 访问
            id d = array[1];
          3> 赋值
            array[1] = @"jack";
       NSDictionary的用法
           1> 创建
             @{ @"name" : @"Jack", @"phone" : @"10086" } (返回是不可变字典)
           2> 访问
            id d = dict[@"name"];
           3> 赋值
            dict[@"name"] = @"jack";

你可能感兴趣的:(ios学习笔记)