Foundation框架中常用的类有:NSStringNSArrayNSSetNSDictionary 以及它们对应的子类 NSMutableString、NSMutableArray、NSMutableSet、NSMutableDictionary,父类统一为不可变而子类可变,还包括NSDate、NSObject

可变和不可变的区别是对象内容的可变和不可变,子类既然是继承父类那么子类可以使用父类中的任意方法

1.NSString类的操作

  • 使用NSString类的对象初始化方法创建字符串
  1.   // 创建无参数的字符串
    NSString *str2 = [[NSString alloc] initWithString:@"Jack"];
  2.  
  3. // 创建带参数的字符串
  4. NSString *str3 = [[NSString alloc] initWithFormat:@"age is %d",];
  5.  
  6. // C字符串 转换为 OC字符串
  7. NSString *str4 = [[NSString alloc] initWithUTF8String:"Rose"];
  8.  
  9. // OC字符串 转换为 C字符串
  10. const char c = [str4 UTF8String];
  11.  
  12. // 读取文件内容第一种方式:读取桌面下 getWeather.xml 文件里的所有内容
  13. NSString *str5 = [[NSString alloc] initWithContentsOfFile:@"/Users/apple/Desktop/getWeather.xml"
                         encoding:NSUTF8StringEncoding error:nil];
  14.  
  15. // NSUTF8StringEncoding 适用于使用中文的编码格式
  16.  
  17. // 读取文件内容第二种方式
  18.  
  19. // URL:资源路径 格式为:协议头:// 比如本地文件的URL格式:file:// 网络文件的URL格式:http:// 服务器文件的URL格式:ftp://
      NSURL *url = [[NSURL alloc] initWithString:@"file:///Users/apple/Desktop/getWeather.xml"];
      // 如果访问网络就可以定义:http://www.baidu.com
  20.  
  21. NSString *str6 = [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];
  22.  
  23. NSLog(@"/n%@",str6);
  • 使用NSString类方法创建字符串
  1. // 创建无参数的字符串
  2. NSString *str2 = [NSString stringWithString:@"Jack"];
  3.  
  4. // 创建带参数的字符串
  5. NSString *str3 = [NSString stringWithFormat:@"age is %d",];
  6.  
  7. // C字符串 转换为 OC字符串
  8. NSString *str4 = [NSString stringWithUTF8String:"Rose"];
  9.  
  10. // 读取文件内容第一种方式:读取桌面下getWeather.xml文件里的所有内容
  11. NSString *str5 = [NSString stringWithContentsOfFile:@"file:///Users/apple/Desktop/getWeather.xml" encoding:NSUTF8StringEncoding error:nil];
  12.  
  13. // NSUTF8StringEncoding 适用于使用中文的编码格式
  14.  
  15. // 读取文件内容第二种方式:读取桌面下getWeather.xml文件里的所有内容
  16. NSURL *url = [NSURL URLWithString:@"file:///Users/apple/Desktop/getWeather.xml"];
  17. NSString *str6 = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];

  可以看出实现同一个功能NSString提供了对象方法和类方法两种解决方式而类方法快捷方便,因此在实际开发中推荐使用类方法来操作字符串

  • 将字符串写入到一个文件里
  1. // 给目标文件中写入字符串,两种写入方式在写入之前都会将文件中的内容全部清空后再写入
  2.  
  3. // 第一种写入方式
  4. // atomically参数指写入不成功时要不要停止
  5. [@"Java,iOS" writeToFile:@"/Users/apple/Desktop/getWeather.xml" atomically:YES encoding:NSUTF8StringEncoding error:nil];
  6.  
  7. // 第二种写入方式
  8. NSString *content = @"iOS,Java";
  9. // NSURL提供了直接定义本地URL的类方法
  10. NSURL *url = [NSURL fileURLWithPath:@"/Users/apple/Desktop/getWeather.xml"];
  11. [content writeToURL:url atomically:YES encoding:NSUTF8StringEncoding error:nil];

2.NSMutableString类的操作

  • NSMutableString继承自NSString那么NSMutableString可以使用NSString类中的任意方法
  • NSMutableString提供了自己独有的方法
  1. NSString *str = [NSString stringWithFormat:@"My age is 10 "];
  2. NSString *str2 = [str stringByAppendingString:@"11 12"];
  3. NSLog(@"%@",str2); // 打印:My age is 10 11 12
  4.  
  5. NSMutableString *mutalbeStr = [NSMutableString stringWithFormat:@"My age is 10 "];
  6. [mutalbeStr appendString:@"11 12"]; // appendString方法没有返回值,说明是直接str字符串后面进行拼接
  7. NSLog(@"%@",mutalbeStr); // 打印:My age is 10 11 12

  8. // 可以看出:NSString一旦定义了str字符串它本身就不可变了,虽然NSString类方法也提供了拼接的方法如stringByAppendString方法但是它返回的是一个新的字符串。而NSMutableString提供的拼接方法appendString方法是在原有的字符串上直接拼接它没有返回值。这就是可变和不可变字符串的本质
  1. // NSMutableString 提供了删除方法,比如说要删掉上面可变字符串中的11有两种方式:
  2.  
  3. // 第一种 必须要清楚要删除内容的location和length,11在整个字符串中的loc = 11 length = 2 (不推荐使用)
  4. //[mutalbeStr deleteCharactersInRange:NSMakeRange(13, 2)];
  5.  
  6. // 第二种:先获取要删除内容的范围,然后删除范围内的字符串
  7. NSRange range = [mutalbeStr rangeOfString:@""];
  8. [mutalbeStr deleteCharactersInRange:range];
  9.  
  10. NSLog(@"%@",mutalbeStr); // 打印:My age is 10 12
  1.  

2.OC集合类的操作

(1) OC集合类包括NSArray,NSSet,NSDictionary都是以面向对象的方式操作数组,而且OC数组不像C语言中的数组只能存放同一种数据类型,它可以    存放任意类型的对象,但是不能存放非OC对象类型如基本数据类型int,struct,enum等

(2) OC数组是以对象的方式存在,因此在创建的时候需要为创建的对象前面加*

(3) NSArray数组一旦创建就决定了是不是可变,而且永远是可变或不可变

(4) NSArray数组和子类NSMutableArray的基本操作

  1. // 使用NSArray的类方法arry创建个数组
  2. // 创建时定义为空数组,那么array数组将永远是空数组
  3. NSArray *array = [NSArray array];
  •  NSArray的常见操作:
  1. // 创建数组对象有两种方式
  2. // 第一种方式:
  3. NSArray *array = [NSArray arrayWithObjects:@"Jack",nil];
  4. // 数组中包含了两个NSString对象 nil是用来标识数组元素结束的标识
  5. // 因此OC数组中不能存放空对象
  6. NSArray *array1 = [NSArray arrayWithObjects:@"Jack",@"Rose", nil];
  7.  
  8. // 第二种方式:(推荐使用)
  9. NSArray *array2 = @[@"Jack",@"Rose"];
  1. // 获取数组的长度 array1.count;
  2. NSUInteger count = [array1 count];
  3. NSLog(@"%ld",count);
  1. // 访问数组中的对象的两种方式
  2. NSString *str1 = [array1 objectAtIndex:]; // 数组中索引为1的对象,OC中提供的方法 返回:Jack
  3. NSString *str2 = array1[]; // 编译器特性其实还是转为上面的形式来访问 返回:Jack
  1. // 遍历数组的三种方式
  2. // 第一种:
  3. for (int i = ; i<array1.count; i++) {
  4. NSLog(@"%@",array1[i]); // 数组中存放的是对象可以用%@输出
  5. if (i ==) {
  6. break;
  7. }
  8. }

  9. // 第二种:将array1数组中的每个对象拿出来赋给obj然后依次打印
  10. for (id obj in array1) { // id obj 代表数组中的对象
  11. // 获取obj对象在数组中的索引
  12. NSUInteger index = [array1 indexOfObject:obj];
  13. NSLog(@"%ld-->%@",index,obj);
  14. }

  15. // 第三种:使用Block 每次从数组中遍历一个元素后就传递给block,block也相应的执行一次
  16. // block中的id obj对应数组中的元素,NSUInteger idx对应数组中元素的索引 BOOL用来停止遍历
  17. [array1 enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
  18.  
  19. NSLog(@"%ld-->%@",idx,obj);
  20.  
  21. // 如果索引为0 立即停止遍历
  22. if (idx ==) {
  23. *stop = YES;
  24. }
  25. }];
  •  NSMutableArray的基本操作:
  1.   // 创建可变数组
    NSMutableArray *mutableArray = [NSMutableArray array];
      
  2. // NSMutableArray *mutalbeArray2 = @[@"张三",@"李斯"]; 注意:@[]返回的是不可变NSArray数组 这样会报错
  1.   // 为可变数组增加任意对象
    Person *person = [[Person alloc] init];
  2. [mutableArray addObject:person];
  3. [mutableArray addObject:@"Jack"];
  4. [mutableArray addObject:@"John"];
  5. // [mutableArray addObject:10]; 数组中不可以存放基本数据类型
  1. // 从数组中删除指定的元素
  2. [mutableArray removeObject:@"John"];
  3. [mutableArray removeObjectAtIndex:];
  4. // 将数组中的元素全部删除
  5. [mutableArray removeAllObjects];

(5) NSSet数组和子类NSMutableSet的基本操作

  • NSSet和NSArray都是不可变数组,一旦创建就无法改变。NSSet是无序的集合简单操作:
  1. // 创建NSSet集合
  2. NSSet *set = [NSSet set]; // 一旦创建为空永远为空
  3. NSSet *set2 = [NSSet setWithObjects:@"Jack",@"Rose",@"Jim",nil];
  4.  
  5. // 随机获取NSSet集合中的元素
  6. NSString *str = [set2 anyObject];
  7. NSLog(@"%@",str);
  • NSMutableSet的简单操作:
  1. // 创建可变set集合
  2. NSMutableSet *mutableSet = [NSMutableSet set];
  3.  
  4. // 为set添加集合
  5. [mutableSet addObject:@"Jack"];
  6. [mutableSet addObject:@"Rose"];
  7.  
  8. // 删除元素
  9. [mutableSet removeObject:@"Jack"];

(6) NSArray和NSSet数组的对比

  • 都是可以存放任意类型的OC对象的集合,都不能存放基本数据类型
  • 本身都是不可变的,但是子类都是可变的
  • NSArray是有序的集合,NSSet是无序的集合

(7) NSDictionary和NSMutableDictionary

  • NSDictionary和它的子类NSMutableDictionary都是以key/value的形式存在,NSDictionary本身为不可变集合
  • NSDictionary也是无序集合
  • 字典集合中存储的值是以键值对的形式存在,如果存在相同的key那么后面key的值会被覆盖。但是允许vaule的重复
  • NSDictionary的基本操作
  1. // 常见创建Dictionary集合的四种方式
  2.  
  3. // 1.创建一个空的字典集合类型
  4. NSDictionary *dic = [NSDictionary dictionary]; // 一旦为空 永久为空
  5.  
  6. // 2.创建只有一组值的字典集合
  7. NSDictionary *dic1 = [NSDictionary dictionaryWithObject:@"Jack" forKey:@"name"];
  8.  
  9. // 3.创建多个值的字典集合
  10. NSArray *keys = @[@"name",@"address",@"e-mail"];
  11. NSArray *values = @[@"Jack",@"北京",@"jack@163.com"];
  12. NSDictionary *dic3 = [NSDictionary dictionaryWithObjects:values forKeys:keys];
  13.  
  14. // 4.通过值/键的方式来创建
  15. NSDictionary *dic4 = [NSDictionary dictionaryWithObjectsAndKeys:
  16. @"Jack",@"name",
  17. @"北京",@"address",
  18. @"jack@163.com",@"e-mail",nil];
  19.  
  20. // 5.类似于数组的创建方式 (推荐使用)
  21. NSDictionary *dic5 = @{@"name":@"Jack",
  22. @"address":@"北京",
  23. @"e-mail":@"jack@163.com"};
  1. // 取值:根据相应的Key取出对应的值
  2. NSString *name = [dic1 objectForKey:@"name"]; // 返回 Jack
  1. // 返回键值对的个数
  2. NSUInteger count = dic5.count; // 返回 4
  1. // 遍历NSDictionary数组用两种方式:
  2. // 第一种方式:
  3. // 获取字典中所有的键
  4. NSArray *allKeys = [dic5 allKeys]; // 获取的键在数组中是无序的
  5.  
  6. for (int i = ; i < dic5.count; i++) {
  7. NSString *key = allKeys[i];
  8. NSString *value = dic5[key];
  9. NSLog(@"%@-->%@",key,value);
  10. }
  11.  
  12. // 第二种方式:将字典中的键值对传递给Block中的key和obj
  13. [dic5 enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
  14. NSLog(@"%@-->%@",key,obj);
         // 遍历一次立即停止 *stop = YES;
  15. }];
  • NSMutableDictionary的基本操作
  1. // 创建可变字典
  2. NSMutableDictionary *mutableDic = [NSMutableDictionary dictionary];
  3. // NSMutableDictionary *mutableDic2 = @{@"name",@"Rose",@"address",@"北京"}; 错误的写法因为右边返回的是不可变的字典
  1. // 为可变字典添加元素
  2. [mutableDic setObject:@"Rose" forKey:@"name"];
  3. [mutableDic setObject:@"北京" forKey:@"address"];
  1. // 移除
  2. [mutableDic removeAllObjects];
  3. [mutableDic removeObjectForKey:@"name"];
  1. // 打印
  2. NSLog(@"%@",mutableDic); // 输出:address = "\U5317\U4eac"; name = Rose;     \U5317\U4eac 就是北京存储的形式

(8) 设计一个通讯录里面包含了四个人的姓名、电话、地址

  1. NSArray *friends = @[
  2. @{@"name":@"张三",@"phone":@"",@"address":@"北京"},
  3. @{@"name":@"李斯",@"phone":@"",@"address":@"上海"},
  4. @{@"name":@"王武",@"phone":@"",@"address":@"天津"},
  5. @{@"name":@"赵柳",@"phone":@"",@"address":@"南京"}];
  6.  
  7. // 获取‘李斯’的通讯录信息
  8. NSDictionary *dic = friends[];
  9. NSLog(@"%@",dic);

iOS Foundation框架 -2.常用集合类简单总结的更多相关文章

  1. iOS Foundation框架 -1.常用结构体的用法和输出

    1.安装Xcode工具后会自带开发中常用的框架,存放的地址路径是: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.plat ...

  2. iOS Foundation框架简介 -1.常用结构体的用法和输出

    1.安装Xcode工具后会自带开发中常用的框架,存放的地址路径是: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.plat ...

  3. iOS Foundation 框架概述文档:常量、数据类型、框架、函数、公布声明

    iOS Foundation 框架概述文档:常量.数据类型.框架.函数.公布声明 太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业 ...

  4. iOS Foundation 框架基类

    iOS Foundation 框架基类 太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转 ...

  5. iOS Foundation框架 -3.利用NSNumber和NSValue将非OC对象类型数据存放到集合

    1.Foundation框架中提供了很多的集合类如:NSArray,NSMutableArray,NSSet,NSMutableSet,NSDictionary,NSMutableDictionary ...

  6. Foundation 框架 NSString常用总结

    iOS开发过程中,从始至终都会和NSString打交道,在此总结一下NSString的常用的方法,在以后的学习过程中用到的方法也会继续添加 NSString类是Foundation框架中得不可变字符串 ...

  7. iOS Foundation框架 -4.NSDate类的简单用法

    NSDate为日期时间类对象,简单操作: 注意:直接NSLog输出NSDate对象,默认是以0时区为标准,因此会比北京时间少8小时 1.将Date格式转换为自定义格式的字符串格式 // 自定义Date ...

  8. Foundation 框架 NSFileManager,NSData 简单的文件操作

    一.简单展示NSFileManager的使用 #import <Foundation/Foundation.h> int main(int argc, const char * argv[ ...

  9. foundation 框架 NSString常用总结(二)

    以此作为NSString常用总结(一)的补充 NSString* str = [NSString stringWithFormat:@"I love programing! You, com ...

随机推荐

  1. 教程:如何减小iOS应用程序的大小?

    本文译自:Reducing the size of my App Q: 怎样才能让我的程序安装包小一点,让程序的下载和安装更快速? A: 本文收集了一些减小程序安装包大小的相关技巧(当第一次下载和安装 ...

  2. 分布式缓存技术redis学习(二)——详细讲解redis数据结构(内存模型)以及常用命令

    Redis数据类型 与Memcached仅支持简单的key-value结构的数据记录不同,Redis支持的数据类型要丰富得多,常用的数据类型主要有五种:String.List.Hash.Set和Sor ...

  3. javascript实现经纬度与地址的互转

    最近项目中会用到将地址转换为经纬的.从出来,还一直未遇到过这类问题,下来自己提前学习了,将自己所学的记录在案. 在网上找了很多资料,最后确定了,百度的API,有实现相关的接口(API地址).使用API ...

  4. A Simple Problem with Integers poj 3468 多树状数组解决区间修改问题。

    A Simple Problem with Integers Time Limit: 5000MS   Memory Limit: 131072K Total Submissions: 69589   ...

  5. WWH学习模式

    WWH是"What+Why+How"的简称,是对学习方法最完美的概括."如果不按照WWH这种模式来教学,90%的结果是老师没教好,学生学不好." 1.What( ...

  6. Specialized Four-Digit Numbers

    Problem Description Find and list all four-digit numbers in decimal notation that have the property ...

  7. 使用get方式提交数据

    get提交代码 import java.io.InputStream; import java.net.HttpURLConnection; import java.net.MalformedURLE ...

  8. 通过布赛尔曲线以及CAShapeLayer的strokeStart 、strokeEnd 属性来实现一个圆形进度条

    #import <UIKit/UIKit.h> @interface CircleProgressView : UIView /**起始值(0-1)*/ @property(nonatom ...

  9. Java各种类型占用的字节数

    Java 占用字节数 转自:http://www.blogjava.net/stevenjohn/archive/2013/10/18/405416.html 数据类型 大小(二进制位数) 范围 默认 ...

  10. XML 命名空间

    XML 命名空间 一.XML命名冲突 在 XML 中,元素名称是由开发者定义的,当两个不同的文档使用相同的元素名时,就会发生命名冲突. 这个 XML 文档携带着某个表格中的信息: <table& ...