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

来源:互联网 发布:淘宝全屏海报显示不全 编辑:程序博客网 时间:2024/05/18 00:10
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

前言   Foundation介绍

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

一、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<array.count; 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 <NSCopying>)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 <NSCopying>)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";
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 学校移动4g网卡怎么办 没上专科线怎么办福建 联考没过本科线怎么办 拍婚纱拍的脸歪怎么办? 老婆彻底寒心要离婚怎么办 手机被同学偷了怎么办 钱被同学偷了怎么办 上班穿皮鞋脚疼怎么办 高跟靴子买大了怎么办 我怀了第三个小孩怎么办? 离婚前把钱花了怎么办 对谈对象有压力怎么办 和对象感情淡了怎么办 孩子处对象学习下降怎么办 孩子高三成绩差怎么办 老妈怨气太重怎么办 广东小高考有d怎么办 高考考生档案袋有个小洞怎么办 江苏省考生出省后小高考成绩怎么办 江苏小高考三D怎么办 小高考补考没过怎么办 理科高考200多分怎么办 高考没考过200分怎么办 电子手表指针不走了怎么办 家长说你教的不好怎么办 小升初分班考试考砸了怎么办 老公不给老婆看病怎么办 孕妈妈涨奶严重怎么办 90岁老头尿不下尿怎么办 妻子要离婚丈夫不离怎么办 弟媳妇天天在家吵架怎么办 弟媳妇不和我说话怎么办 我想和弟媳妇做一次怎么办 老公对弟媳妇有非分之想怎么办 跟弟媳妇有矛盾怎么办 学生考试前不认真怎么办 有人雇凶要杀我怎么办 高考理综数学英语都没考好怎么办 母亲判刑孩子未成年无人监管怎么办 高三了数学30分怎么办 母猪发烧耳朵放血止不住了怎么办?