**OC中的NSArray和NSmutableString
本文将介绍在oc中关于集合(NSArry,也可称之为数组)和可变字符串(NSmutableString)的一些内容:
- 关于NSmutableString
- 关于NSArray
- NSArray的创建
- NSArray添加数据
- NSArray获取某个数据
- NSArray移除数据
- NSArray数据遍历
- NSArray数据排序
- 关于NSArray其他操作方法
关于NSmutableString
- 其实NSmutableString和NSString都是表示一个字符串,NSString字符串初始化以后是不能改变的,而NSmutableString定义的字符串可以更改。其方法和NSString基本操作差不多一样。
-如appendString表示追加字符串;
-substringFromIndex截取字符串;
-componentsSeparatedByString分割字符串;
-characterAtIndex根据下表取值;
-stringByAppendingPathExtension追加一个拓展名;
-stringByDeletingPathExtension删除一个拓展名;
-hasPrefix,hasSuffix判断前后缀;
等等一些方法…
关于NSArray
- 关于OC中的NSArray可以理解成数组,也可以理解成是集合,用来装一个类型数据的合集,在java中我们通常把数组和集合(List..)区分开来,其实OC中的NSArray和java中的list很像。有java基础的开发人员应该很容易能够懂。
NSArray的创建
- arrayWithObjects方法
- initWithContentsOfFile方法,从文件中获取数据
注意:
集合中如果数据是某一自定义对象,这些对象不用自己释放,当数组销毁时会一一释放对象,由于初始化数据的时候arrayWithO ject是静态方法所以它的释放不用我们管理,系统帮我们管理。
说明:
initWithContentsOfFile方法是从某个文件中获取数据,放到数组中,这个的文件数据并不是什么数据都可以,要具有一定的格式-xml格式数据,如:
,所以一般文件格式为.xml格式的文件。
NSArray添加数据
- arrayByAddingObject能够添加一个数据到数组
注意:
使用这个方法添加数据得到的是 一个新的数组,不是在原来的基础上添加进去的,因为NSArray初始化完成以后就不能改变了,也可以说NSArray不支持添加操作,这里可以使用NSMutableArray(是NSArray的子类),这个和NSmutableString特性有点像,是可变的。
NSArray获取某数据
- objectAtIndex能够添加一个数据到数组
当然有根据下标获取数据,那肯定就能根据数据获取其下标:
这个的stu是一个数组里面一个对象。
NSArray移除数据
- NSArray没有移除数据的方法,因为NSArray初始化以后是不能改变的,个NSString一样,可以使用NSMutableArray,该类中有个方法removeObjectAtIndex:index,移除下标为index的元素。
NSArray数据遍历
- 用普通的for循环遍历,优点-事能够获取下标
和java中的for一样的,比较简单。
- 用普通的foreach循环遍历,优点-效率相对比较高
这里的for结构为:for(id data in array){},
id:表示一切对象;
data:表示临时变量,和java中的一样;
in:相当于java中的额 “:”,在哪里循环;
array:表示需要遍历的数组;
- 使用Block代码块来进行遍历
这方法apple是比较推荐的,效率比较高,容易控制。
enumerateObjecyUsingBlock中有三个参数,
id :当前的对象;
NSUInteger:当前对象的下标;
BOOL:表示是否停止遍历,如需要停止着*stop=false即可。(参数中的 *stop表示是一个指针,而获取指针的值就是 *stop,把指针值更改为false,停止遍历)。
NSArray数据排序
- sortedArrayUsingSelector:@selector(compare:)默认升序
说明:@selector表示可以理解为一个筛选器,compare:是系统的方法,调用该方法排序会返回一个已经排好序的新数组。
- sortedArrayUsingSelector:@selector(compareStudent:)自定义筛选方法,compareStudent:自己写的筛选方法,该方法写在Student对象中,因为array里面装的是Student对象数据。
Student中:
说明:在student.h中声明,返回值固定为NSComparisonResult
-(compareStudent) compareStudent:(student *)stu
在student.m中实现该方法
-(NSComparisonResult)compareStudent:(student *)stu{
NSComparisonResult result=[self.name compare:stu.name];
//以下可以写判断方法。。。。
return result;
}
在main中调用该方法:
- 使用代码段block,sortedArrayUsingComparator:^NSComparisonResult(id*obj1,id *obj2)
其实最终原来还是根据student中的名字来排序的在代码中可以看到。
- 自定义筛选器,sortedArrayUsingDescriptors方法
这里的需求是先根据学生姓名来排序,然后在根据学生拥有的书名排序。
首先我们定义一个根据学生姓名排序的筛选器:
osrtDescriptorWith:表示根据哪个key来为排序标准
ascending:是否升序,yes表示升序,no表示降序
根据书名来创建排序器也一样的。
关于NSArray其他操作方法
- makeObjectsPerformSelector给数组中的每个对象发送一条消息
其中test方法是student中定义的方法。
可以有参数,也可以没有参数,但是如果有参数,最多只能有一个参数传递。
- writeToFile把数组中的数据写出到文件
ffilepath:文件路径;
atomically:是否遵守原子性。
- containsObject是否包含了某个对象值
- componentsJoinedByString把数组拼接成一个字符串
方法有一个参数@”-“:表示分割组合成的字符串用“-”来分开。
最终打印的结果为:
×××× - ×××× - ×××× - ××××;