天天看点

OC:Foundation框架

Foundation框架主要定义了一些基础类,供程序员来使用。Foundation框架中的所有类都继承自NSObject这个对象。

      一、数据类型:

      1、表示范围作用的结构体: NSRange :

            有三种方式创建新的 NSRange

      (1)、 NSRange range ;

                 range.location = 17;

                 range.length = 4;

      (2)、 NSRange range = {17, 4} ;

      (3)、 NSRange range =NSMakeRange ( 17 , 4 ); (推荐)

表示用来处理几何图形的数据类型:NSPoint (点坐标)和 NSSize (长度和宽度)还有一个矩形数据类型(由点和大小复合而成)NSRect。

      Cocoa 提供创建这些数据类型方法:NSMakePoint ()、 NSMakeSize ()和NAMakeRect ()

      2、表示字符串的类 NSString

      NSString *heigth = [ NSStringstringWithFormat : @"You heigth is %d feet,%d inches", 5,11 ];

创建的类对象包含了指向超类的指针、类名和指向类方法的列表的指针。类对象还包含一个long的数据,为新创建的类对象指定大小。

      返回字符串中的字符的个数:

      unsigned int length =[heigth length];

      返回 Bool 值的字符串比较函数:

      - (BOOL) isEqualToString : ( NSString * ) aString;// 比较两个字符串的内容是否相等

      还可以使用 compare :方法

      - ( NSComparisonResult ) compare :( NSString * ) string;// 逐个字符比较

      不区分大小写的比较:

      - ( NSComparisonResult ) compare :( NSString * ) string options :( unsigned ) mask ;

      注意:NSComparisonResult 是一个枚举值

      options 是一个位掩码,即:

      NSCaseInsensitiveSearch :不区分大小写

      NSLiteralSearch : 进行完全比较,区分大小写

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

      检查字符串是否以另一个字符串开头

      - ( BOOL ) hasPrefix : (NSString *)aString;

      判断字符串是否是以另一个字符串结尾

      - ( BOOL ) hasSuffix : (NSString *)aString;

      如果你想知道字符串内的某处是否包含其他字符串,使用 rangeOfString : 方法

      - ( NSRange ) rangeOfString :( NSString * ) aString ;

      NSString 是不可变的,NSMutableString 是可变的。用方法 stringWithCapacity :来创建

      NSMutableString *string =[NSMutableString stringWithCapacity : 42];

      可以使用 appendString :或 appendFormat : 来附加新字符串:

            - (void) appendString : ( NSString * ) aString ;

            - (void) appendFormat : ( NSString * ) format , . . . ;

      可以使用deleteCharactersInRange : 方法删除字符串中的字符

            - (void) deleteCharactersInRange : ( NSRange ) range ;

      二、集合家族:

      1、NSArray :用来存储对象的有序列表(任意类型的对象)

      (1)限制:只能存储 Objective — C 的对象,不能存储 C 语言的基本数据类型( int 、float 、enum 、struct中的随机指针)。同时也不能存储 nil (对象的零值或 NULL 值)

      (2)// 创建一个新的 NSArray

            NSArray *array = [ NSArrayarrayWithObjects : @"one",@"two", nil ];

            // 获得包含的对象个数

            - ( unsigned ) count ;

            // 获得特定索引处的对象

            - ( id ) objectAtIndex :( unsigned int ) index ;

      (3)切分数组:使用 componentsSeparatedByString : 来切分 NSArray ,

            NSString*string = @"oop : ack : bork : greeble : ponies" ;

            NSArray*chunks = [string componentsSeparatedByString : @":"];

      (4)使用 componentsJoinedByString : 来合并 NSArray 中的元素并创建字符串

string= [chunks componentsJoinedByString : @":-)"] ;

      (5)NSArray 是不可变数组,数组中包含的对象是可以改变的,但是数组对象本身是不会改变的。

      (6)可变数组 NSMutableArray 通过类方法 arrayWithCapacity :来创建可变数组

            + ( id )arrayWithCapacity :( unsigned ) numItems ;

            NSMutableArray*array = [NSMutableArray arrayWithCapacity : 17];

      使用 addObject : 在数组末尾添加对象

            - ( void )addObject :(id)anObject

      删除特定索引的对象

            - ( void )removeObjectAtIndex:(unsigned)index;

      注:可变数组还可以在特定索引处插入对象,替换对象,为数组排序, NSArray 还提供了大量好用的功能 。

      2、枚举:NSEnumerator 用来描述这种集合迭代器运算的方法:

      (1)要想使用 NSEnumerator ,需要通过 objectEnumerator 向数组请求枚举器:

            -(NSEnumerator *) objectEnumerator;

      可以像这样使用这个方法:

            NSEnumerator*enumerator ;

            enumerator= [array objectEnumerator ];

      注:若想从后向前枚举集合,使用方法 reverseobjectEnumerator ; 也可以使用。

      (2)获得枚举器以后,开始 while 循环,每次循环都向这个枚举器请求它的 nextObject

            - (id )nextObject ;// 返回nil 表明循环结束

            注:在枚举的过程中不能改变数组容器。

      (3)快速枚举示例:

            for(NSString *string in array ) {

            NSLog(@"I found %@", string );

            }

      3、数组排序:

      例如:一条记录就是一条卡片的信息,包括( NSString *name 和 NSString *email )

            - ( void ) sort

            {

            [booksortUsingSelector:@selector(compareNames:)]

            }

      其中:

      @selector(compareNames:)

      //创建一个 SEL类型的 selector ,sortUsingSelector: 使用该方法比较数组中的两个元素,sortUsingSelector: 方法需要完成这样的比较,它先调用这个指定的 selector 方法,然后向数组(接受者)的第一条记录发送消息,比较其参数和此记录。指定方法的返回值为 NSComparisonResult 类型,返回值为:若小于返回NSOrderedAscending  ;相等返回 NSOrderedSame ;大于返回      NSOrderedDescending

-(NSComparisonResult)compareNames:(id)element

{

return[name compare:[element name]];

}

      4、NSDictionary :(关键字和定义的组合)

      (1)NSDictionary 通常在给定一个关键字(通常是一个 NSString 字符串)下存储一个数值(可以是任何类型的对象)。然后你可以使用这个关键字查找相应的数值。

      使用 dictionaryWithObjectsAndKeys :来创建字典

            + ( id ) dictionaryWithObjectsAndKeys :( id ) firstObject , . . .

      例如:

            Tire*t1 = [Tire new];

            NSDictionary*tires = [ NSDictionary dictionaryWithObjectsAndKeys :t1,@"front-left",nil];

      (2)使用方法 objectForKey :来获取字典中的值

            - ( id ) objectForKey :( id ) akey ;

      查找轮胎可以这样:

            Tire*tire = [tires objectForkey : @"front-left"];

      (3)创建新的 NSMutableDictionary 对象,向类 NSMutableDictionary 发送 dictionary 消息。也可以使用dictionaryWithCapacity : 方法来创建新的可变字典

+ ( id ) dictionaryWithCapacity : ( unsigned int ) numItems ;

可以使用方法 setObject : forKey :方法给字典添加元素

setObject: forKey:( id ) aKey

      (4)下面是另一种使用发送 dictionary 消息来创建字典的方法:

            NSMutableDictionary*tires ;

            tires= [NSMutableDictionary dictionary] ;

            [tiressetObject : t1 forKey : @"front-left"];

            .. .

      注:<1>若对字典中已有的关键字使用 setObject : forKey :方法,则用新的替换

              <2>可以使用removeObjectForKey : 方法来删除可变字典中的一个关键字

                        - ( void ) removeObjectForKey : ( id ) aKey ;

              <3>不要去创建 NSString 、 NSArray 或 NSDictionary 的子类,实在要的话可以用复合的方式来解决问题。

              使用这种方法枚举词典:

              for(NSString *key in g )

              {

                  .. .

              }

      5、集合对象:

      (1)、Set 是一组单值对象的集合,有可变和不可变,操作包括:搜索、添加、删除集合中的成员(仅用于可变集合)、比较两个集合,计算两个集合的交集和并集等。

      #import<Foundation/NSSet.h>

      常用的 NSSet 方法

      方法 说明

      + ( id ) setWithObjects:obj1,obj2,...,nil 使用一列对象创建新集合

      - ( id ) initWithObjects:obj1,obj2,...,ni l 使用一列对象初始化新分配的集合

      - ( NSUInteger ) count 返回集合的成员个数

      - ( BOOL ) containsObject : obj 确定集合是否包含 obj

      - ( BOOL ) member : obj 使用isEqual :方法确定集合是否包含 ob j

      - ( NSEnumerator * ) objectEnumerator 为集合中的所有对象返回一个NSEnumerator对象

      - ( BOOL ) isSubsetOfSet : nsset 确定 receiver 的每个成员是否都出现在nsset中

      - ( BOOL ) intersectsSet : nsset 确定是否 receiver 中至少一个成员出现在对象 nsset 中

      - ( BOOL ) isEqualToSet : nsset 确定两个集合是否相等

      (2)常用的 NSMutableSet 方法( NSSet 的子类)

            注: NSInteger 不是一个对象,基本数据类型的 typedef ,被 typedef 成 64 位的long 或 32 位 int

 方法       说明

      - ( id ) setWithCapacity:size 创建新集合,使其具有存储 size 个成员的初始空间

      - ( id ) initWithCapacity:siz e 将新分配的集合设置为 size 个成员的存储空间

      - ( void ) addObject:obj 将对象 obj 添加到集合中

      - ( void ) removeObject:obj 从集合中删除对象 obj

      - ( void ) removeAllObjects 删除接受者的所有成员

      - ( void ) unionSet:nsset 将对象 nsset 的所有成员昂添加到接受者

      - ( void ) minusSet:nsset 从接受者中删除 nsset 的左右成员

      - ( void ) intersectSet:nsset 将接受者中的所有不属于 nsset 的元素删除