Object-C之NSArry,(补充NSmutableString)

**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删除一个拓展名;

    -hasPrefixhasSuffix判断前后缀;

    等等一些方法…


关于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把数组拼接成一个字符串

    方法有一个参数@”-“:表示分割组合成的字符串用“-”来分开。

    最终打印的结果为:

    ×××× - ×××× - ×××× - ××××;

时间: 2024-12-05 11:45:02

Object-C之NSArry,(补充NSmutableString)的相关文章

JS与Object-C交互补充

有一个场景,用户点击Web页面,产生JS交互时,如何根据JS事件,App做出响应. 我们可以自己做一个简单的js交互,实现基于的原理是: 1. object-c利用stringByEvaluatingJavaScriptFromString:(NSString *)script消息获取uiwebview页面数据. 2. 那么如何监控特定的js事件呢?UIWebViewDelegate的(BOOL)webView:shouldStartLoadWithRequest:navigationType:

代理(Proxy)和反射(Reflection)

前面的话 ES5和ES6致力于为开发者提供JS已有却不可调用的功能.例如在ES5出现以前,JS环境中的对象包含许多不可枚举和不可写的属性,但开发者不能定义自己的不可枚举或不可写属性,于是ES5引入了Object.defineProperty()方法来支持开发者去做JS引擎早就可以实现的事情.ES6添加了一些内建对象,赋予开发者更多访问JS引擎的能力.代理(Proxy)是一种可以拦截并改变底层JS引擎操作的包装器,在新语言中通过它暴露内部运作的对象,从而让开发者可以创建内建的对象.本文将详细介绍代

我想问一下,您做动图用的是什么软件,我找了一款,但是不是很清楚。期待您的回复~~

6,以下表达式的运行结果是: var END = Math.pow(2,53); var START = END -100; var count = 0; for(var i = START ; i <= END ;i++){ count ++; } console.log(count); A.0 B.100 C.101 D.其他 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 7,以下表达式的运行结果是: var arr = [0,1,2]; arr[10]

代理(Proxy)和反射(Reflection) (转)

转自:http://www.cnblogs.com/xiaohuochai/p/7268600.html 前面的话 ES5和ES6致力于为开发者提供JS已有却不可调用的功能.例如在ES5出现以前,JS环境中的对象包含许多不可枚举和不可写的属性,但开发者不能定义自己的不可枚举或不可写属性,于是ES5引入了Object.defineProperty()方法来支持开发者去做JS引擎早就可以实现的事情.ES6添加了一些内建对象,赋予开发者更多访问JS引擎的能力.代理(Proxy)是一种可以拦截并改变底层

复制对象 copy 与mutable copy

转载 :  http://blog.csdn.net/u010962810/article/details/18887841 通过copy方法可以创建可变对象或不可变对象的不可变副本,对于不可变副本,其对象的值不可以改变. 通过mutableCopy方法可以创建可变对象或不可变对象的可变副本,对于可变副本其对象是可变的. 复制分为浅复制和深复制两种:浅复制只是复制对象的引用,并没有复制对象的具体内容.深复制则创建了要复制对象的具体内容,并返回对象副本的引用. 对于复制Foundation中的对象

Foundation Classes

Classes Class Abstract NSObject NSObject is the root class of most Objective-C class hierarchies. 在Objective-C的类层次结构树中,NSObject是大多数类的根类. NSArray NSArray and its subclass NSMutableArray manage ordered collections of objects called arrays. NSArray和其子类N

ora-01652无法通过128(在temp表空间中)扩展temp段

有两种原因:一是临时表空间空间太小,二是不能自动扩展. 分析过程: 既然是temp表空间有问题,那当然就要从temp表空间说起啦.首先要说明的是temp表空间的作用,temp表空间主要是用作需要排序的操作. 1.临时表空间 是用于在进行排序操作(如大型查询,创建索引和联合查询期间存储临时数据)每个用户都有一个临时表空间. 2.对于大型操作频繁,(大型查询,大型分类查询,大型统计分析等),应指定单独的临时表空间,以方便管理. 3.分配用户单独临时表空间,一般是针对 大型产品数据库,OLTP数据库,

复制对象(一)copy和mutableCopy方法

本文转载至 http://www.tuicool.com/articles/Fn6rMn CSDN博客原文  http://blog.csdn.net/u010962810/article/details/18887841 通过copy方法可以创建可变对象或不可变对象的不可变副本,对于不可变副本,其对象的值不可以改变. 通过mutableCopy方法可以创建可变对象或不可变对象的可变副本,对于可变副本其对象是可变的. 复制分为浅复制和深复制两种:浅复制只是复制对象的引用,并没有复制对象的具体内容

同样在JavaScript中

ES6有三个内置决定一些设施x和一些y是“相同的”. 它们是:平等或“双等于”(==),严格平等或平等“三重”(===),Object.is. (注意,Object.is在ES6补充道. 等于两倍和三倍等于存在ES6之前,和他们的行为没有改变.) 概述 演示,下面是三个同样使用的比较: x = = y x = = = y Object.是(x, y) 短暂.双等于将执行类型转换当比较两件事;三等于将做同样的比较没有类型转换(通过简单总是返回false如果不同类型);Object.is行为一样等于