当你用代码区实现你的app的时候,你会发现有许多的framework可供你使用,在这些frameworks中比较重要的是Foundation frameworks,它提供了你的app的基本的serves,Foundation framework包含value class,它包含基本的数据类型,比如:number,strings,和collection class等
Value object:
Foundation framework用strings,binary data,dates,and times,numbers,and other values的类去产生value object.
value object是一个能够封装原始类型并能提供对他的值进行访问的对象,value object通常作为参数,或者你所调用的方法或函数的返回值,
一些值对象的例子:
NSString 和NSMutableString
NSArray 和NSMUtableArray
NSDate
NSNumber'
NSValue
value object代表一个标量值,你可以在任何需要他的地方使用
值对象相对于它所封装的原始对象来说有一个优点:
让你对它所封装的value进行简单高效的访问,比如NSString 类,他有搜寻和替换某个subString的方法,你可以调用方法快速的达到你的目的
Strings:
NSString class为string提供了封装,
NSNumber
创建包含int value和double value的NSNumber object
创建包含Bool value和character value的NSNumber object
还可以创建包含unsigned integer,long integers,long long integers,和float value的NSNumber object.当你创建这些对象时应在数值后面加上U or L or LL or F,如创建一个float value的value object
collection object
在Objective-c中大部分的collection objects都是basic collection class如NSArray,NSDictionary ,NSSet,等的实例。这些类去管理多个对象,添加到一个collection中的object必须是objective-c基本类的实例。
你添加到一个collection中的任何object你都可以随时取用,那是因为collection class 用strong reference去记录他的内容
NSArray,NSSet,NSDictionary的content在创建之时就已设定好,他们不能被改变,他们是immutable的,他们中的每一个都有一个可Mutable的子类去add and remove object.
不同的类型的collections组织他们包含的content用不同的方式
NSArray and NSMutableArray:
一个array中的对象是有顺序的,在array中通过index来获取对象,index 0是Array中第一个对象
NSSet and NSMutableSet:在一个set中的object是没有顺序的,通常获取一个对象用test这个对象是否在set中
NSDictionary and NSMutableDictionary:存储他的对象用key-value pairs,key 是唯一的identifier,通常用string,the value 是你想要存储的object,通常用key来获取他
Array
一个Array是有序的对象的list,array中的每一个item都是objective-c中的一个对象,但对象的类型可以不一样
create array:
可以通过allocation 和initialization来build Array:
根据不同的对象,用不同的参数和不同的初始化方法
arrayWithObjects:方法和initWithObjects:方法必须以nil终止,必须包含nil作为他的最后的一个值
在下面这种情况下:
object someArray仅仅包含一个对象firstObject.因为sceondObject 是nil,当用ArrayWithObjects:来创建数组是一nil作为元素的终止标志
而array中可以包含nil,把nil当作array的一个element
可以用上面的这种方法来创建包含nil element的NSArray object someArray;
Querying Array Objects
在创建了数组之后,你要从数组中得到一些information,比如Array中包含多少个objects,判断某个object是否在Array中
用NSArray的实例方法count:可以得到某个NSArray的对象包含多少个objects.返回值为NSUInteger
用NSArray的实例方法containsObject:方法可以判断某个对象是否存在于某个NSArray的对象中
可以用index来得到一个NSArray 对象中在该index位置的item,但你所提供的index必须是可用的,否则在运行时就会谈出out of bounds exception.当用index访问NSArray的对象时,你必须要check 该对象是否为空,你的index是否超出了该对象所包含的objects的个数
上面的这个例子check了number of items,看他是否为0,如果不是用NSLog function输出someArray的first object
你可以访问数组用一个下标,就好像你在用C Array一样
Sort Array Objects
NSArray提供了许多方法去对数组中的元素进行排序,但由于NSArray是immutable的,所以在排序后将会产生一个新的NSArray object;
你可以用string中的compare:来比较一个string NSArray对象中的string items
Mutability
NSArray本身是immutable的,但他包含有mutable的子对象
可以添加一个mutable string 到一个immutable Array:
这样做了以后,你可以更改这个mutableString
当你想要从已经创建的Array中添加或是移除objects时,需要用NSMutableArray
sorted imutableArray中的item依次是:“alphon","beta","list".
Set:
set与array有点相似,但在set中的item是没有顺序的,并且两个item不能相同
由于set没有顺序,所以当用来test某一个item是否存在的时候有这非常好的性能
NSSet是immutable的,所以必须在创建的时候指明他的content.可以用allocate 和initial 或是用NSSet的类创建方法
NSSet的方法:initWithObjects:和setWithObjects:都包含一个nil终结符,它告诉xcode该NSSet的instance object所包含的item在此结束,不包含nil.
NSMutableSet是NSSet的子类:
NSSet仅仅存储一次对单个对象的reference,当同一个对象被多次添加的时候,他只包含一个对象。
iset中仅仅只有一个对象intNumber;
Dictionaries:
与简单的存储一个有顺序或是没有顺序的object的collection相比,Dictionary 用一个与object相联系的给定的key值
来存储对象,用这个key值来检索对象
尽管你可以用非string作为keys,但要记住在NSDictionary中,对每一个key都是通过cope来使用的,所以keys必须支持NSCope.如果你想要通过key值来找到value或通过value来找到key,你最好用NSString 作为key.
可以用allocation和initialization 的组合或使用类的构造方法来创建NSDictionary对象
dictionaryWithObjectsAndKeys:与initWithObjectsAndKeys:都是以nil作为终结标识符的。
还可以直接用·@{key:object,key:object,...}来创建dictionary
用这种方法创建dictionary时,注意没有nil终结标识符
Querying dictionary:
在你已经build一个dictionary之后,你可以用被给的key来从dictionary里获取该key所对应的object.
当你需要在build一个dictionary之后,你还需要对这个dictionary添加或更改item,你需要用到NSMutableDictionary
represent nil with NSNull
在objective-c中nil代表no object,当你在selection中需要一个代表“no object"的对象时可以用[NSNull null]来代替
在NSNull中,null方法总是return the same instance,因此,你可以check一个array中是否有这个shared instance.