黑马程序员--OC自学笔记---10Foundation、NSString、NSURL、NSRange、NSArray、NSMutableArray、NSDictionary

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


1.   Foundation框架简介:

1)   框架是由许多类、方法、函数、文档按照一定的逻辑组织起来的集合,以便使研发程序变得更容易在OS X下的Mac操作系统中大约有80个框架为所有程序开发奠定基础的框架称为Foundation框架

2)   Foundation框架的作用

是Mac/iOS中其他框架的基础;

包含了很多开发中常用的数据类型。

3)   使用foundation框架

只要引入头文件即可#import<Foundation/Foundation.h>

4)   如果不小心修改了系统的文件,会引起错误

删除xcode的缓存就可以还原,缓存路径为:

/Users/用户名/Library/Developer/Xcode/DeriveDate(默认为隐藏文件)

显示隐藏文件,在终端使用以下命令,重启finder即可。

显示隐藏文件:defaultswrite com.apple.finder AppleShowAllFiles –bool true

隐藏隐藏文件:defaultswrite com.apple.finder AppleShowAllFiles –bool false

2.  NSString介绍

1)        一个NSString对象就代表一个字符串(文字内容),一般称NSString为字符串类。

2)        stringWithFormat方法初始化的字符串在堆区。

NSString *str = [NSStringstringWithFormat:@”abc”];

3)        writeToFile方法,用来写入文件

NSString *str2 = @”abcdef”;
NSError *err;
//四个参数分别为:文件路径;是否原子性;编码方式;错误存储
[str2 writeToFile:@”/Users/Mac/Desktop/str.txt”  atomically:YES  encoding:NSUTF8StringEncoding  error:&err];

4)        stringWithContentsOfFile方法用来读取文件内容,对字符串进行初始化。

NSError *err;
NSString *str3 = [NSStringstringWithContentsOfFile:@”文件路径” encoding:NSUTF8StringEncoding error:&err];

3.   NSURL读取字符串

1)        NSURL简介

①  URL全称为Uniform Resource Locator(统一资源定位符)

URL是互联网上标准资源的地址

互联网上的每个资源都有一个唯一的URL,它包含的信息指出资源的位置

根据一个URL就能找到唯一的一个资源。

②  URL格式

基本URL包含协议、主机域名(服务器名称\IP地址)、路径

http://ios.itcast.cn/ios/images/content25.jpg

可以简单认为:URL=协议头://主机域名/路径

③  常见URL协议头

a.   http\https:超文本传输协议资源,网络资源。https://标明是使用SSL加密的

http的连接很简单,是无状态的,端口为80

https协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全,端口是443.

b.   ftp:文件传输协议

2)        NSURL读取字符串

①  使用URLWithString

a.   构建本地路径的URL

NSString *str = @”abcde”;
NSURL *url = [NSURL URLString:@”file:///Users/Mac/Desktop/a.txt”];
[str writeToURL:url  atomically:YES encoding:NSUTF8StringEncodingerror:nil];

b.   可以构建路径,调用手机系统的程序

NSURL *url = [NSURL URLWithString:@”tel://10086”];

//使用此url可以打电话


NSURL *url = [NSURL URLWithString:@”sms://10086”];

//使用此url可以发短信

②  使用fileURLWithPath  获取本地文件路径

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

3)        从文件获取内容初始化字符串

使用stringWithContentsOfURL

NSURL *url = [NSURL URLString:@”file:///Users/Mac/Desktop/a.txt”];

NSString *str = [NSStringstringWithContentsOfURL:url encoding:NSUTF8StringEndoding error:nil];

4.   NSString字符串比较

1)        比较字符串大小

使用compare方法,返回结果为NSComparisonResult类型,为枚举类型,有NSOrderedAscending(-1), NSOrderedSame(0), NSOrderedDescending(1)

NSString *str1 = @”abc”;

NSString *str2 = @”Abc”;

NSComparisonResult result = [str1compare:str2];

默认区分大小写,所以结果为1

2)        加条件进行比较

使用compare: options:条件      方法

常用的条件有三个:

NSCaseInsensitiveSearch:不区分大小写

NSLiteralSearch:进行完全比较,区分大小写(默认)

NSNumericSearch:比较字符串的字符个数,而不是字符值。

NSString *str1 = @”abc”;

NSString *str2 = @”Abc”;

NSComparisonResult result = [str1compare:str2  options: NSCaseInsensitiveSearch|NSNumericSearch];

不区分大小写来比较str1和str2的字符个数,结果为0.

有多个条件时,使用|进行分隔。

3)        “==”不能判断字符串是否相等,判断的是地址。

可以使用isEqualToString来判断内容是否相等,区分大小写。

NSString *str1 = @”abc”;    //常量区
NSString *str2 = @”abc”;    //常量区
NSString *str3 = [NSStringstringWithFormat:@”abc”];   //堆区
str1==str2  //1
str1==str3  //0
[str1 isEqualToString:str2];   //1
[str1 isEqualToString:str3];   //1

5.   NSString前后缀检查

1)        检测前缀

方法为:hasPrefix

[str hasPrefix:@”待检测内容”];判断str是否以“待检测内容”为前缀,返回值为BOOL类型

2)        检测后缀

方法为hasSuffix

[str hasSuffix:@”指定字符串”];判断str是否以“指定字符串”为后缀,返回值同样为BOOL类型。

6.   字符串搜索

搜索字符串str2在字符串str1中首次出现的位置

方法为:rangeOfString   返回值为NSRange类型,为结构体类型,

Typedef struct{
NSUInteger  location;
NSUInteger  length;
}NSRange;
NSRange range = [str1 rangOfString:str2];

搜索str2在str1中首次出现的位置,返回值得到range.location和range.length

1)   如果查找到,则range.location为str2在str1中首次出现的位置,range.length为str2的长度

2)   如果查找不到,range.location的值为NSNotFound(最大的long类型的值),range.length的值为0

7.   字符串的截取和替换

//1.字符串的截取

       

 //1)从某位置开始(包括这个位置),截取到最后
        NSString *str =@"abcdefgh";
        NSString *subStr =[str substringFromIndex:5];
        NSLog(@"subStr =%@",subStr);//subStr = fgh

     

   //2)从头开始,截取到某个位置(不包括这个位置)
        subStr = [strsubstringToIndex:5];
        NSLog(@"subStr =%@",subStr);//subStr = abcde

       

       

 //3)从某个位置开始(包括这个位置),截取指定长度的字符串
        //注意:使用NSRange截取的范围不可超出字符串,越界访问会报错
        NSRange range = {3,5};
        subStr = [strsubstringWithRange:range];
        NSLog(@"subStr =%@",subStr);//subStr = defgh<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">       </span>

        

//2.字符串的替换
        //把字符串中的原有部分内容替换为指定内容。
       //stringByReplacingOccurrencesOfString:旧内容 withString:新内容
        NSString *oldStr =@"abcde abcde abc abc";
        NSString *newStr=[oldStr stringByReplacingOccurrencesOfString:@" "withString:@""];
        NSLog(@"newStr =%@",newStr);
        //去掉空格newStr = abcdeabcdeabcabc
       
        newStr = [newStrstringByReplacingOccurrencesOfString:@"a" withString:@"#"];
        NSLog(@"newStr =%@",newStr);
        //把newStr的a换成#:newStr = #bcde#bcde#bc#bc

8.  NSRange

1)        NSRange是Foundation框架中比较常用的结构体,其定义为

typedef struct _NSRange {
   NSUInteger location;
   NSUInteger length;
} NSRange;

NSUInteger的定义为:

typedef unsigned long NSUInteger;

NSRange用来表示事物的一个范围,通常是字符串里的字符范围或者数组里的元素范围。

NSRange有2个成员:

NSUInteger location:表示该范围的其实位置

NSUInteger length:表示该范围内的长度

2)        NSRange的初始化方式

      

//1)通过结构体变量访问成员
  	NSRange r;
       r.location = 3;
       r.length = 3;

  //2)结构体变量整体赋值
       NSRange r2;
       r2 = (NSRange){4,2};
       NSRange r3 = {2,4};
       
       //3)部分赋值
       NSRange r4 = {.location = 5};
       
       //4)OC新增初始化方法
       //NSMakeRange方法,给NSRange结构体变量整体赋值。
       NSRange r5 = NSMakeRange(4, 4);
 
       //将结构体变量转换为字符串NSStringFromRange(结构体变量名)
       NSLog(@"r5 = %@",NSStringFromRange(r5));
            //r5 = {4, 4}

9.   NSString的其他用法

1)        获取字符串的长度,使用-(NSUInteger)length方法

2)        获取字符串的每个字符-(unichar)characterAtIndex:(NSUInteger)index;

3)        字符串转换为其他类型

①  -(double)doubleValue;字符串转化为double类型

②  -(float)floatValue;字符串转化为float类型

③  -(int)intValue;字符串转化为int类型

4)        C和OC字符串的互相转换问题

①          C---->OC

char *s = “abcde”;

//用C字符串来初始化OC字符串

NSString *str = [NSStringstringWithUTF8String:s];

②          OC--->C

NSString *str2 = @”aaaaaa”;

//把OC字符串转化为C字符串

char *s = [str2 UTF8String];

5)        去掉字符串收尾的空格

去掉字符串的所有空格

[strstringByReplacingOccurrencesOfString:@” ” withString:@””]

去掉首尾空格

[strstringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];

10. NSMutableString的使用

1)        NSMutableString类继承NSString类,但NSString是不可变的,里面的文字内容不能进行修改。而NSMutableString是可变的,厘米男的文字内容可以随时修改。

2)        不可变:指的是字符串在内存中占用的存储空间固定,并且存储的内容不能发生变化。

可变:指的是字符串在内存中占用的存储空间可以不固定,并且存储的内容可以被修改。

3)        NSMutableString定义的字符串存储在堆区。

4)        常用方法

//创建一个空的字符串
 NSMutableString *str = [NSMutableStringstring];
      //格式化添加字符串
       [str appendFormat:@"abcdefghijk"];
       NSLog(@"str = %@",str);//str = abcdefghijk
       
        //删除字符串的一部分
       [str deleteCharactersInRange:NSMakeRange(3, 3)];
       NSLog(@"str = %@",str); //str = abcghijk
       
       //字符串中插入内容
       [str insertString:@"def" atIndex:3];
       NSLog(@"str = %@",str);//str = abcdefghijk
       
       //替换字符串的部分内容
        [strreplaceCharactersInRange:NSMakeRange(3, 3) withString:@"*****"];
        NSLog(@"str = %@",str);//str= abc*****ghijk


5)        NSMutableString使用注意

①  @””只能给NSString赋值,不能给NSMutableString赋值,运行时会报错

②  NSMutableString的string属性可以修改字符串的内容

str.string = @”abc”; 会把str修改为“abc”.

③  开发中绝大多数用到的是NSString,只是在需要对字符串进行特殊处理的时候才使用NSMutableString。

④  位枚举

如果方法的参数中有位枚举变量,但是不想使用位枚举,可以把位枚举的值设为0,这样位枚举就不起作用。

11.       NSArray

1)   基本使用和注意事项

//     + (instancetype)array;创建一个空数组
       NSArray *arr = [NSArray array];
       NSLog(@"arr = %@",arr);
       
//     + (instancetype)arrayWithObject:(ObjectType)anObject;
       //创建一个数组,有一个元素
       NSArray *arr2 = [NSArray arrayWithObject:@"abc"];
       NSLog(@"arr2 = %@",arr2);
       
//     + (instancetype)arrayWithObjects(ObjectType)firstObj, ...
       //创建一个数组,有多个元素,元素类型可以不一致
       //nil表示数组初始化元素结束
       NSArray *arr3 = [NSArray arrayWithObjects:@"a",@1, nil];
       NSLog(@"arr3 = %@",arr3);
       
//     + (instancetype)arrayWithArray:(NSArray *)array;
        NSArray *arr4 = [NSArrayarrayWithArray:arr3];
       NSLog(@"arr4 = %@",arr4);
       
//     - (instancetype)initWithObjects:(ObjectType)firstObj, ...
       //调用对象方法初始化
   NSArray *arr5 = [[NSArrayalloc]initWithObjects:@"a",@"b",nil];
       NSLog(@"arr5 = %@",arr5);
       
       //使用注意
       //1)不能给NSArray赋值为nil,它表示数组元素结束,可以使用[NSNull null]进行赋值
       NSArray *arr6 = [NSArray arrayWithObjects:@"a",[NSNull null],nil];
        NSLog(@"arr6 = %@",arr6);
       //2)使用时不要用第一种方法进行赋值,只是创建一个空数组,不能改变,没有意义.


2)   NSArray的常见用法

NSArray *arr = [NSArrayarrayWithObjects:@"a",@"1",@2,@"bbb", nil];
       
       //1)获取数组的长度,用count属性获取数组元素的个数
       NSLog(@"arr.count = %ld",arr.count);
       
       //2)根据下标,获取对应的对象
       NSLog(@"%@",[arr objectAtIndex:3]);
       
       //3)返回某个元素的下标
       NSUInteger loc;
       loc = [arr indexOfObject:@"1"];
       NSLog(@"%ld",loc);
       
       //4)检查数组是否包含某元素
       if([arr containsObject:@2]){
           NSLog(@"包含");
       }else{
           NSLog(@"不包含");
       }


简化方式,定义和访问数组元素

     

  //1)定义数组,使用@[]方式
       NSArray *arr =@[@"aaa",@"bbb",@3,@"four"];
       NSLog(@"%@",arr);
       
       //2)访问数组,使用下标
        NSLog(@"%@",arr[2]);<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"> </span>

3)   NSArray的遍历

NSArray *arr = @[@"one",@"two",@"three",@"four"];
       //1)普通方式,通过下标访问
       for (int i=0; i<arr.count; i++) {
           NSLog(@"arr[%d] = %@",i,arr[i]);
       }
       //2)快速枚举法  for循环的增强模式
       for (NSObject *str in arr) {
           NSLog(@"%@",str);
       }
       //3)通过使用block遍历
  [arr enumerateObjectsUsingBlock:^(id _Nonnull
obj, NSUInteger idx, BOOL * _Nonnull stop){
           NSLog(@"arr[%ld] = %@",idx,obj);
     }];

运行结果:


4)   NSArray读写文件

//NSArray文件读写
       NSArray *arr = @[@"one",@"two",@"three",@"four"];
       //写入文件
       if([arr writeToFile:@"/Users/mac/Desktop/a.txt"
atomically:YES]){
           NSLog(@"写入成功");
       }
           
       //读取文件
       NSArray *readArr = [NSArray
arrayWithContentsOfFile:@"/Users/mac/Desktop/a.txt"];
       NSLog(@"readArr = %@",readArr);


运行结果:


文件内容:


5)   NSArray与字符串

      

 //定义一个数组
       NSArray *arr =@[@"one",@"two",@"three",@"four"];
       //把数组元素用指定符号连接成字符串
       
       NSString *str = [arr componentsJoinedByString:@"#"];
       NSLog(@"str = %@",str);//str = one#two#three#four
       
       //把字符串用其中的字符分割成多个数组元素
       //字符串一般要有规律,能被某个字符分割成多部分
       NSString *str2 = @"aaa~bbb~ccc~ddd";
       NSArray *arr2 = [str2 componentsSeparatedByString:@"~"];
       NSLog(@"%@",[arr2 firstObject]);//打印数组第一个元素
       NSLog(@"%@",[arr2 lastObject]);//打印数组最后一个元素
       NSLog(@"\narr2 = %@",arr2);

       

 

12.       NSMutableArray

1)        NSMutableArray的基本使用

//NSMutableArray的使用
       //①创建数组
       //a.创建一个空数组
       NSMutableArray *arr = [NSMutableArray array];
       
       //b.创建一个数组并初始化一个元素
       NSMutableArray *arr2 = [NSMutableArray arrayWithObject:@"a"];
       
       //c.创建一个数组并初始化多个元素
       NSMutableArray *arr3 = [NSMutableArrayarrayWithObjects:@"one",@"two",@"three", nil];
       
       //d.创建一个数组,并指定长度
       NSMutableArray *arr4 = [NSMutableArray arrayWithCapacity:10];
       
       //②添加元素
       //a.直接添加
       [arr addObject:@"abc"];
       NSLog(@"arr = %@",arr);
       //b.插入到指定位置
       [arr4 insertObject:@"hao" atIndex:0];
       NSLog(@"arr4 = %@",arr4);
       
       //③删除元素
       //a.删除指定内容的元素
       [arr2 removeObject:@"a"];
       NSLog(@"arr2 = %@",arr2);
       //b.删除指定位置元素
        [arr3 removeObjectAtIndex:1];
       NSLog(@"arr3 = %@",arr3);
       //c.删除全部元素
       [arr removeAllObjects];
       NSLog(@"arr = %@",arr);
       
       //④修改元素
       //修改指定位置元素
       [arr3 replaceObjectAtIndex:1 withObject:@"four"];
        NSLog(@"arr3 = %@",arr3);
       //简单方式
       arr3[1] = @"two";
       NSLog(@"arr3 = %@",arr3);
       
       //⑤判断某个元素是否在数组中
       BOOL isIn = [arr3 containsObject:@"two"];
       NSLog(@"isIn = %d",isIn);
       
       //⑥交换元素
       [arr3 exchangeObjectAtIndex:0 withObjectAtIndex:1];
       NSLog(@"arr3 = %@",arr3);

2)        NSMutableArray的使用注意

不能通过@[]的方式进行赋值,@[]为不可变的


13.       NSDictionary

1)        NSDictionary基本使用

//NSDictionary是不可变的,一旦创建,内容不能改动
       //字典的key值不能重复,重复的话无法添加进去
       //key值和value值都必须是对象
       //字典是无顺序的
       //①创建空字典
       NSDictionary *dict = [NSDictionary dictionary];
       
       //②创建只有一组键值对的字典
       NSDictionary *dict2 = [NSDictionarydictionaryWithObject:@"objOne" forKey:@"one"];
       NSLog(@"dict2 = %@",dict2);
       
       //③创建有多组键值对的字典
       NSDictionary *dict3 = [NSDictionarydictionaryWithObjectsAndKeys:@"objOne",@"one",@"objTwo",@"two",@"objThree",@"three",nil];
       NSLog(@"dict3 = %@",dict3);
       
       //④快速创建字典
       //@{key1值:value1值,key2值:value2值,key3值:value3值,...};
       NSDictionary *dict4 =
       @{@"one":@"objOne",@"two":@"objTwo",@"three":@"objThree"};
       NSLog(@"dict4 = %@",dict4);
       
       //⑤获取字典的长度
       //属性count
       NSLog(@"%ld",dict4.count);//3
       
       //⑥根据key值取出value值
       NSString *str = [dict4 objectForKey:@"two"];
       NSLog(@"str = %@",str);
       
       //⑦遍历字典
       //获取所有得key值,得到所有的value
       for(NSString *key in dict4){
           NSLog(@"key = %@,value = %@",key,[dict4 objectForKey:key]);
       }
       //用block来遍历
       [dict4 enumerateKeysAndObjectsUsingBlock:^(id  _Nonnull key, id  _Nonnull obj, BOOL * _Nonnull stop) {
           NSLog(@"%@ = %@",key,obj);
       }];


2)        NSDictionary简写及文件操作

//简写形式创建字典
 NSDictionary *dict =@{@"one":@"objOne",@"two":@"objTwo",@"three":@"objThree"};
    NSLog(@"dict = %@",dict);
       
       //简写形式获取值
       NSLog(@"one = %@",dict[@"one"]);
       
       //把字典写入文件
       [dict writeToFile:@"/Users/mac/Desktop/dict.plist"atomically:YES];
       
       //从文件读取字典
       NSDictionary *dict2 = [NSDictionarydictionaryWithContentsOfFile:@"/Users/mac/Desktop/dict.plist"];
       NSLog(@"dict2 = %@",dict2);
       
       //在字典中存入数组
       //一个省对应多个市
       //河北省数组
       NSArray *hbArr = [NSArrayarrayWithObjects:@"baoding",@"shijiazhuang",@"chengde",nil];
       //北京数组
       NSArray *bjArr = [NSArrayarrayWithObjects:@"chaoyang",@"changping",@"haidian",nil];
       NSDictionary *dict3 =@{@"hb":hbArr,@"bj":bjArr};
       [dict3 writeToFile:@"/Users/mac/Desktop/dict3.plist"atomically:YES];


14. NSMutableDictionary

//①创建字典
       //空字典
       NSMutableDictionary *dict = [NSMutableDictionary dictionary];
       //指定大小
       NSMutableDictionary *dict2 = [NSMutableDictionarydictionaryWithCapacity:5];
       //快速创建
       NSMutableDictionary *dict3 = [NSMutableDictionary dictionary];
       dict3.dictionary =@{@"1":@"111",@"2":@"222"};
       NSLog(@"dict3 = %@",dict3);
       
       //②给字典添加键值对
       [dict setValue:@"objOne" forKey:@"one"];
       [dict setValue:@"objTwo" forKey:@"two"];
       [dict setValue:@"objThree" forKey:@"three"];
       NSLog(@"dict = %@",dict);
       [dict2 setValue:@"objOne" forKey:@"one"];
       [dict2 setValue:@"objTwo" forKey:@"two"];
       NSLog(@"dict2 = %@",dict2);
       
       //③删除键值对
       //删除一组
       [dict removeObjectForKey:@"one"];
       NSLog(@"dict = %@",dict);
       //删除全部
       [dict removeAllObjects];
       NSLog(@"dict = %@",dict);
       
       //④修改
       //普通形式
       [dict2 setObject:@"valueOfOne" forKey:@"one"];
       NSLog(@"dict2 = %@",dict2);
       //简写形式
       dict2[@"two"] = @"valueOfTwo";
       NSLog(@"dict2 = %@",dict2);
       
       //⑤查找
       //先获取key的数组,再判断是否存在某个key
       NSArray *arr = [dict2 allKeys];
       if ([arr containsObject:@"one"]) {
           NSLog(@"存在");
       }


运行结果截图:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陌影~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值