OC+4-Foundation框架

1、Foundation框架介绍
 框架:由许多类、方法、函数、文档按照一定的逻辑组织起来的集合
Cocoa:Foundation和AppKit
Cocoa Touch:Foundation和UIKit
Foundation的作用:Foundation框架是Mac\iOS中其他框架的基础,包含了开发中常用的数据类型
删除缓存:/User/用户名/Library/Developer/Xcode/DerivedData(默认隐藏)
显示隐藏文件:defaults write com.apple.finder AppleShowAllFiles - bool true
隐藏隐藏文件:defaults write com.apple.finder AppleShowAllFiles - bool false

NSString字符串
1、字符串比较函数
     1)比较字符串大小
           compare方法,返回结果有三种:
                  str1 > str2                 NSOrderedDescending     1    降序
                  str1 < str2                 NSOrderedAscending      -1     升序
                  str1 == str2                 NSOrderedSame            0       相同
          取出每个字符,转换为ASCII值比较,默认区分大小写
          常见的options方法:NSCaseInsensitiveSearch   不区分大小写
                                           NSLiteralSearch     完全比较,区分大小写,默认情况
                    NSNumericSearch     比较字符串的字符个数,而不是字符值
     [str1 compare :str2 options : NSLiteralSearch ];
当需要多个options条件时,可以使用'|'来间隔
注意:直接使用'==进行字符串比较,其本质是地址的比较,与字符串的创建方式有关。
     判断字符串内容真正的方法:isEqualToString(BOOL类型)  ,且区分大小写
     完全相等:就是创建在常量区的字符串,因为只保留一份,内容和地址都一样。
  2)NSString前后缀检查及搜索 
     1、检测地址是否合法
                NSString *url = @"http://ios.cn" ;
        // 如何检测一个字符串是一个网址
       
// http:// 或者 https:// 开头
       
// 用法: [str hasPrefix:@" 要检测内容 "];
       
if ([url hasPrefix : @"http://" ] || [url hasPrefix : @"https://" ]) {
           
NSLog ( @" 是一个网址 " );
        }
else {
           
NSLog ( @" 不是一个网址 " );
        }
     2、检测文件后缀是否合法
        // 检测字符串的后缀
       
//.jpg/.png/.jpeg/.gif
       
NSString *imgName = @"xxx.jpg" ;
       
// 用法: [str hasSuffix:@" 要检测内容 "]
       
if ([imgName hasSuffix : @".jpg" ]||[imgName hasSuffix : @".png" ]||[imgName hasSuffix : @".jpeg" ]||[imgName hasSuffix : @".gif" ]) {
           
NSLog ( @" 是一张图片 " );
        }
else {
           
NSLog ( @" 不是一张图片 " );
        }
  3)字符串查找
      // 查找某个字符串在另一个字符串中首次出现的位置
       
//1 @"abcdefiosdefios"
       
//2 @"ios"
        //用法:[str1 rangOfString str2];
        //查找2 在 1中首次出现的位置和长度
        NSString *str1 = @"abcdefiosdefios" ;
       
NSString *str2 = @"ios" ;
       
// 返回值 NSRange 结构体
        NSRange range = [str1 rangeOfString:str2];
        NSLog(@"%lu,%lu", range.location, range.length);
     如果查不到,返回信息:location    特别大的数(NSNotFound)  最大的long类型的数
                        length      0
     so,这种查找,最好使用if,把查找不到的提示写出来
  4)NSRange的使用
      1、NSRange: 用来表示事物的一个范围,通常是字符串里的NSR字符范围或者数组里的元素范围         
      typedef struct _NSRange {
            NSUInteger location;  //位置(起始位置)
            NSUInteger length;    //字符串出现的长度(实质是子字符串的长度)【范围内的长度】
        } NSRange;
      2、NSRange的创建方式
          NSRange是一个结构体别名,用NSRange定义的变量涉及赋值问题,其中整体赋值需要强制转换为NSRange,因为不强制转换,编译器不知道是数组还是结构体。
          OC新增赋值方法:NSMakeRange(loc, len);
          查看结构体的内容,可以把结构体转换为字符串:NSString *NSStringFromRange(NSRange range)
         用法: NSLog( @“%@“,  NSStringFromRange( NSRange range ) );

2、字符串的截取和替换函数
     1)字符串的截取
         -(NSString *) substringFromIndex:(NSUInteger)from;
         从指定位置from开始(包括指定位置的字符)到尾部
         - (NSString *) substringToIndex:(NSUInteger)to;
          从字符串的开头一直截取到指定的位置to,但不包括该位置的字符
         -(NSString *) substringWithRange:(NSRange)range;
          按照所给出的NSRange从字符串中截取子串
          返回值都是字符串
           NSString *str = @"http://www.baidu.com" ;
        //1、从XX位置开始(包括),到尾部结束
        NSLog ( @"%@" , [str substringFromIndex : 5 ]);    // //www.baidu.com
        //2 、从开始位置,到 XX 位置结束(不包括)
        NSLog ( @"%@" , [str substringToIndex : 5 ]);     // http:
        //3 、截取一个范围 range
        NSRange r1 = { 3 , 4 };
        NSLog(@"%@", [str substringWithRange:r1]); // p://

     2)字符串的替换
        - ( NSString *)stringByReplacingOccurrencesOfString:( NSString *)target withString:( NSString *)replacement       // 用replacement(要替换的内容)替换target(原字符串的内容)
         NSString *str = @"http:**www.baidu.com*cn" ;
        //*替换为/
        NSString * newStr = [str stringByReplacingOccurrencesOfString : @“*"  withString : @"/" ];
        NSLog(@"%@", newStr );
       注意:多种替换,需分步进行

3、NSString的其他用法
     1)获取字符串的每个字符
        Gbk gb2312  2
        Utf-8       3
        -(NSUInteger) length;    //返回字符串的长度,OC中不管中英文等,一个字符都是一个字节
        -(unichar)characterAtIndex:(NSUInteger)index;   //返回index位置对应的字符
     2)字符串转换为其他类型
          1、字符串转数值
               intValue,floatValue,doubleValue
          2、OC的字符串和C的字符串转换问题,char *NSString
               a、C—--->OC对象
              用C语言的字符串创建OC字符串对象[NSString stringWithUTF8String:(const  char *)];
               b、OC对象———>C的字符串
                 const char *s = [( NSString *) UTF8String];
     3)去除首位空格
          -( NSString *)stringByTrimmingCharactersInset:[NSCharacterSet whitespaceCharacterSet]



NSMutableString介绍和使用
介绍:NSMutableString类继承NSString类,那么NSString的方法在NSMutableString中基本都可以使用。类似链表,可以任意的动态在字符串中添加、删除、插入字符串,更加灵活。
NSMutableString和NSString的区别:1、NSString是不可变的,内容不能进行修改(常量区,只读
                              2、NSMutableString是可变的,内容可随时更改(堆区)
                              3、NSMutableString能使用NSString的所有方法
不可变:指的是字符串在内存中占用的存储空间固定,并且存储的内容不能发生改变
可变:指的是字符串在内存中占用的存储空间可以不固定,并且存储的内容可以被修改
         NSMutableString *str = [ NSMutableString stringWithFormat : @"Jack" ];
        [str appendString : @"&Rose ];//追加
        NSLog(@"%@", str);          //地址不变,空间变大

       // 打印 10 itcast
        // 创建一个可变的空字符串
       
NSMutableString *str = [ NSMutableString string ];
       
NSLog ( @"str = %@" , str);
        for (int i = 0; i < 10; i++) {
            [str appendString:@" itcast"];
        }
        NSLog(@"str = %@", str);

1、NSMutableString常用的方法
     1)通过调用string方法,创建一个空的NSMutableString
        -(void)appendString:( NSString   *)aString;   //拼接aString到最后面

-(void)appendFormat:( NSString  * )format,...;    
//拼接一段格式化字符串到最后面
                         NSMutableString *str = [ NSMutableString string ];
        [str appendFormat : @"http://www.baidu.com/%d" , 100 ];
        NSLog(@"%@", str); 
       

-(void)deleteCharacterInRange:( NSString   * )range;           
  //从指定的range开始,删除字符
        [str deleteCharactersInRange : NSMakeRange ( 3 , 4 )];
        NSLog(@"%@", str);


-(void)insertString:( NSString   * )aString atIndex:(NSUInteger)loc;     
  //在loc位置插入aString
        [str insertString : @"p://" atIndex : 3 ];
        NSLog(@"%@", str);

-(void)replaceCharactersInRange:(NSRange)range withString:( NSString   * )aString;
//使用aString替换range范围内的字符串,一般不是以string开头的一般都不会产生一个新的字符串。replaceOccurrencesOfString方法不需要传范围参数。
       [str replaceCharactersInRange : NSMakeRange ( 11 , 5 ) withString : @"itcast" ];
        NSLog(@"%@", str);

2、字符串使用注意事项
     1)NSMutableString易犯错误
           // 给可变字符串赋值一个不可变的值,不能再调用可变方法
        NSMutableString *str = @"abc";
     2)NSMutableString的string属性:会将原对象的所有字符串都覆盖掉
        .string属性可以修改字符串内容
     3)开发中到底使用NSString还是NSMutableString
        绝大多数使用NSString,只有在特殊处理(截取,拼接,替换)等操作,才使用NSMutableString
     4)位枚举,枚举值是2的N次方
        正常options设置值为1、2、4...
        options:也可以置0,表示什么都没做



NSArray的介绍和使用
1、NSArray的基本介绍
NSArray是OC中的数组类,开发中尽量使用NSArray代替C语言数组。C语言数组的弊端,只能存储一种类型的数据,不能很方便的动态添加数组元素,不能很方便的动态删除数组元素。
使用注意:只能存放任意OC对象,并且是有序的。不能存储非OC对象,例如基本数据类型。它是不可变的,一旦初始化,内容就永远固定,不能删除和添加元素。

2、NSArray的创建方式
        //NSArray 特点
        // 一旦创建,内容不可变
       
// 只能存放 OC 对象
       
       
//1 、创建一个空数组
       
NSArray *arr1 = [ NSArray array ];
       
NSLog ( @"arr1 = %@" , arr1); // 可以直接打印,%@可以直接打印对象类型
       
//2 、创建数组,只有一个元素
        NSArray *arr2 = [NSArray arrayWithObject:@"1"];
        //nil 表示赋值结束, [ NSNull null ]表示存一个空
        //3、创建数组,有多个元素( 常见写法 )
        NSArray *arr3 = [NSArray arrayWithObjects:@"one", [ NSNull null ] , @1, nil];
        //4 、调用对象方法,创建数组
       
NSArray *arr4 = [[ NSArray alloc ] initWithObjects : @"three" , @"four" , nil ];
       
//5 、用一个数组可以创建另外一个数组
        NSArray *arr5 = [NSArray arrayWithArray:arr3];

3、NSArray的常见用法
NSArray *arr3 = [ NSArray arrayWithObjects : @"one" , [ NSNull null ], @1 , nil ];
       
//1 、获取数组长度
       
NSLog ( @"%ld" , arr3. count );
       
//2 、根据下标,获取下表对应的对象
       
NSLog ( @"%@" , [arr3 objectAtIndex : 2 ]);
       
//3 、返回元素的下标
       
NSInteger index = [arr3 indexOfObject : @"one" ];
       
NSLog ( @"%ld" , index);
       
//4 、数组中是否包含某个元素
       
if ([arr3 containsObject : @"one" ]) {
           
NSLog ( @" 包含 " );
        }
else {
           
NSLog ( @" 不包含 " );
        }

     // 简化的方式,定义和访问数组
        // 定义格式: @[ 数组元素 ]
       
NSArray *arr = @[ @"1" , @4 , @"one" ] ;
       
// 访问数组 , 可以直接使用 C 语言访问,并不需要下标访问
        NSString *str = arr[1];

4、NSArray的遍历
      // 创建数组
        NSArray *arr = @[ @"one" , @"two" , @"three" , @"four" ] ;
       
// 遍历数组
       
//1 、普通的下标访问
       
for ( int i = 0 ; i < arr. count ; i++) {
           
NSLog ( @"->%@" , arr[i]);
        }
       
//2 、快速枚举法   for 循环的增强形式
       
for ( NSString *str in arr) {
           
NSLog ( @"-->%@" , str);
        }
       
//3 block 访问
       
//obj: 数组元素 idx: 元素下标   stop: 是否停止 (YES: 停止 NO: 不停止 )
        [arr
enumerateObjectsUsingBlock :^( id   _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
           
if (idx == 2 ) {
                *stop =
YES ;
            }
else {
           
NSLog ( @"idx = %ld, obj = %@" , idx, obj);
            }
        }];

5、NSArray读写文件
两种文件:.xml和.plist
       // NSArray 中的内容写入到文件中
        NSArray *array = @[@"one", @"two", @"three"];
        //.plist是一种特殊的文件格式,该文件可以手动添加元素
       BOOL isWrite = [array writeToFile : @"/Users/ZacharyUE/Desktop/arr.plist" atomically : YES ];
       
if (isWrite) {
           
NSLog ( @" 写入成功 " );
        }
  // 读取
       
NSArray *readArray = [ NSArray arrayWithContentsOfFile : @"/Users/ZacharyUE/Desktop/arr.plist" ];
        NSLog(@"%@", readArray);

6、NSArray与字符串
1、把数组元素链接成字符串
     NSArray *arr = @[@1 , @2 , @3 , @4] ;
       
//1 1-2-3-4 ,链接数组
       
//[ 数组 componentsJoinedByString:@" 分隔符 "];
       
NSString *str = [arr componentsJoinedByString : @"-" ];
       
NSLog ( @"%@" , str);
        
2、字符串分割,保存在数组
       //2 、分割字符串,保存在数组
       
//400-800-12500
       
NSString *str1 = @"400-800-12500" ;
       
NSArray *arr1 = [str1 componentsSeparatedByString : @"-" ];
       
NSLog ( @"%@" , [arr1 firstObject ]); // 第一个元素
       
NSLog ( @"%@" , [arr1 lastObject ]); // 最后一个元素
        //400-800-12500#400-888-11200
        // 分步进行#’——>-'



NSMutableArray使用
1、NSMutableArray介绍
NSMutableArray是NSArray的子类,类似NSMutableString,可变的,可以随时添加、更改、删除元素
       // 创建一个空的可变数组
        NSMutableArray *arr = [NSMutableArray array];

2、NSMutableArray基本使用方法
  //1 、创建一个空的可变数组
       
NSMutableArray *arr1 = [ NSMutableArray array ];
       
//2 、初始化一个元素
       
NSMutableArray *arr2 = [ NSMutableArray arrayWithObject : @"one" ];
       
//3 、初始化多个元素
       
NSMutableArray *arr3 = [ NSMutableArray arrayWithObjects : @"i" , @"l" , nil ];
       
//4 、创建数组,并且指定长度
       
NSMutableArray *arr4 = [ NSMutableArray arrayWithCapacity : 5 ];
      
       
// 添加元素
        [arr1
addObject : @"fengjie" ];
        [arr1
insertObject : @"za" atIndex : 1 ]; // 1 位置插入,如果在 0 插入,自动后移
       
// 删除元素
        [arr1
removeObject : @"za" ]; // 删除某个元素
        [arr1
removeObjectAtIndex : 0 ]; // 根据下标删除
        [arr2
removeAllObjects ]; // 删除全部
       
// 修改元素
        [arr3
replaceObjectAtIndex : 1 withObject : @"xxx" ]; // 替换某个下标内容
        arr3[
1 ] = @"four" ; // 也是下标替换,简便方法
       
// 查找元素
       
BOOL isSearch = [arr3 containsObject : @"i" ];
       
NSLog ( @"%d" , isSearch);
       
// 交换元素   用于打乱数组(产生随机下标)
       
NSMutableArray *arr5 = [ NSMutableArray arrayWithObjects : @1 , @2 , @3 , @4 , @5 , nil ];
       [arr5
exchangeObjectAtIndex : 0 withObjectAtIndex : 4 ]; // 交换两个下标内容
        NSLog(@"%@", arr5);
错误用法 arr4 = @[@1 , @2] ;//给arr4赋值不可变内容
        需使用如下赋值法
        [arr4 addObject:@"xxxxxx"];//NSMutableArray不能使用@[元素];赋值



NSDictionary介绍及使用
1、NSDictionary介绍
NSDictionary:翻译过来就是“字典”,不可变的,一旦初始化内容就无法修改
作用:通过一个key(键),就能找到对应的value(值)

2、NSDictionary使用
// 创建空字典 , 没有意义,因为不可改
       
NSDictionary *dic1 = [ NSDictionary dictionary ];
       
// 创建只有一组键值对的字典
       
//key     value
       
//zs      张三
       
NSDictionary *dic2 = [ NSDictionary dictionaryWithObject : @" 张三 " forKey : @"zs" ];
        //创建多组键值对的字典
        //前面是value,后面是key,成对出现,键值必须是对象
        NSDictionary *dic3 = [ NSDictionary dictionaryWithObjectsAndKeys : @"value1" , @"key1" , @"value2" , @"key2" , nil ];
        NSLog(@"%@", dic3);
结果:{
    key1 = value1;
    key2 = value2;
}
// 快速创建字典
        // 用法: @{key value}
        NSDictionary *dic4 = @{@"zs":@"zhangsan", @"ls":@"lisi"};
注意:key值不能重复,如果重复了,也不会报错,最后添加的不能保存在字典中

3、NSDictionary基本使用方法和遍历方法
    // 返回键值对的个数
       
NSLog ( @"%lu" , dic4. count );
       
// 根据 key 值取出 value
        [dic4
objectForKey : @"zs" ];
       
// 字典的遍历
       
//1 for 遍历默认获取 key
       
//  1 )获取所有的 key
       
//  2 )根据 key 获取 value
       
for ( NSString *key in dic4) {
           
NSLog ( @"key = %@, value = %@" , key, [dic4 objectForKey :key]);;
        }
       
//2 block 遍历
       
//key: 键值 obj:value stop: 是否停止
        [dic4
enumerateKeysAndObjectsUsingBlock :^( id   _Nonnull key, id   _Nonnull obj, BOOL * _Nonnull stop) {
           
NSLog ( @"%@--->%@" , key, obj) ;
        }];

4、NSDictionary的简写及文件操作
      // 简写定义字典
       
NSDictionary *dic1 = @{ @"key1" : @"value1" , @"key2" : @"value2" } ;
       
// 简写获取元素
        NSLog(@"%@", dic1[@"key1"]);
      // 把字典保存在文件中
      
BOOL isWrite = [dic1 writeToFile : @"/Users/ZacharyUE/Desktop/dic.plist" atomically : YES ];
       
if (isWrite) {
           
NSLog ( @" 写入成功 " );
        }
else {
           
NSLog ( @" 写入成功 " );
        }
        // 从文件中读取字典
       
NSDictionary *readDic = [ NSDictionary dictionaryWithContentsOfFile : @"/Users/ZacharyUE/Desktop/dic.plist" ];
        NSLog(@"%@", readDic);

        //      
        // 河南     信阳
       
//       郑州
       
// 河北     保定
       
//       石家庄
       
NSArray *hnArr = [ NSArray arrayWithObjects : @"xinyang" , @"zhengzhou" , nil ];
       
NSArray *hbArr = [ NSArray arrayWithObjects : @"baoding" , @"shijiazhuang" , nil ];
       
NSDictionary *citys = @{ @"hn" :hnArr, @"hb" :hbArr } ;
       
NSLog ( @"%@" , citys);
       
        [citys writeToFile:@"/Users/ZacharyUE/Desktop/cityDic.plist" atomically:YES];

// 读取 cityDic.plist
       
NSDictionary *readCityDic = [ NSDictionary dictionaryWithContentsOfFile : @"/Users/ZacharyUE/Desktop/cityDic.plist" ];
//        NSLog(@"%@", readCityDic);
       
// 遍历
        [readCityDic
enumerateKeysAndObjectsUsingBlock :^( id   _Nonnull key, id   _Nonnull obj, BOOL * _Nonnull stop) {
           
for ( NSString *str in obj) {
               
NSLog ( @"city:%@" , str);
            }
        }];
       
// 获取每个数组
       
NSArray *arr = readCityDic[ @"hn" ];
        NSLog(@"%@", [arr lastObject]);



NSMutableDictionary
NSMutableDictionary是NSDictionary的子类,可变的,可以添加、更改、删除
// 可变字典的创建
       
NSMutableDictionary *dic1 = [ NSMutableDictionary dictionary ]; // 空字典
       
NSMutableDictionary *dic2 = [ NSMutableDictionary dictionaryWithCapacity : 3 ]; // 指定长度
       
// 给可变字典添加键值
        [dic1
setValue : @"lisi" forKey : @"ls" ];
        [dic1
setValue : @"zhaosi" forKey : @"zs" ];
       
// 删除
        [dic1
removeObjectForKey : @"ls" ];
       
// 修改
        [dic1
setObject : @"xxx" forKey : @"zs" ];
       
// 查找
       
NSArray *arr = [dic1 allKeys ];
       
if ([arr containsObject : @"zs" ]) {
           
NSLog ( @" 存在 " ); // 间接使用数组查找
        }
NSArray与NSDictionary的区别
1、NSArray是有序的,通过下标访问元素
2、NSDictionary是无序的,通过key访问元素

NSArray用法:1)创建:@[@“Jack”, @“Rose”];
            2)访问:array[1];//下标访问
            3)赋值:array[1] = @“jack”;
NSDictionary用法:1)创建:@{@“key1”:@“value1”, @“key2”:@value2};
                 2)访问:dic[@“key1”];//键值key访问
                 3)赋值:dic[@“key1”] = @“value1”;



NSURL读写字符串
URL:Uniform Resource Locator(统一资源定位符),是互联网上标准资源的地址。每个资源都有一个唯一的URL,它包含的信息指出资源的位置。
URL格式:基本URL包含协议、主机域名(服务器名称\IP地址)、路径
URL == 协议头://主机域名/路径
常见的URL协议头
     http/https:超文本传输协议资源,网络资源
     http链接很简单,是无状态的
     https://前缀表明SSL加密的,使用需要证书
     http和https使用不同的连接方式,用的端口也不一样,前者是80,后者是443。
     ftp://点对点的文件传输

NSString *str = @"$1000000" ;
       
//URL 统一资源定位符
       
//NSURL OC 提供的 URL 处理类
       
//http
       
//https  加密
       
//ftp://
       
//file://  本地文件
        //URL  写入文件
                  //1 )通过 URLWithString 构建 URL(本地路径、网络资源和构建路径调用手机系统的程序
        NSURL *url = [ NSURL URLWithString : @"file:///Users/ZacharyUE/Desktop/url.txt" ]; // 需要加 file:// 才可以写入成功
                  //2 fileURLWithPath   获取本地文件路径
        NSURL *url = [NSURL fileURLWithPath:@"/Users/ZacharyUE/Desktop/url1.txt"];//此种写法,不需要file://协议
        if ([str writeToURL :url atomically : YES encoding : NSUTF8StringEncoding error : nil ]) {
           
NSLog ( @" 写入成功 " );
        }
else {
           
NSLog ( @" 写入失败 " );
        }

        //URL  读文件
       
NSString *str1 = [ NSString stringWithContentsOfURL :url encoding : NSUTF8StringEncoding error : nil ];
        NSLog(@"%@", str1);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值