zoukankan      html  css  js  c++  java
  • Foudation框架常用结构体和常用类

    表示范围作用的结构体: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()

      
    表示字符串的类NSString 
    NSString *heigth =[NSString stringWithFormat : @"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;

     


    集合家族: 
    NSArray:用来存储对象的有序列表(任意类型的对象) 
    限制:只能存储Objective—C 的对象,不能存储C 语言的基本数据类型(int、float、enum、struct、或者NSArray 中的随机指针)。同时也不能存储nil(对象的零值或NULL 值)

      
    //创建一个新的NSArray

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

      
    //获得包含的对象个数 
    - (unsigned)count;

      
    //获得特定索引处的对象 
    - (id)objectAtIndex :( unsigned int)index ;

      
    切分数组: 
    使用componentsSeparatedByString : 来切分NSArray, 
    NSString *string = @"oop : ack : bork : greeble : ponies" ; 
    NSArray *chunks = [string componentsSeparatedByString : @":"];


    使用componentsJoinedByString : 来合并NSArray 中的元素并创建字符串 
    string = [chunks componentsJoinedByString :@":-)"] ;


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

      
    可变数组NSMutableArray 通过类方法arrayWithCapacity :来创建可变数组 
    + (id)arrayWithCapacity :( unsigned)numItems ; 
    NSMutableArray *array = [NSMutableArray arrayWithCapacity : 17];


    使用addObject : 在数组末尾添加对象 
    - (void)addObject :( id)anObject


    删除特定索引的对象 
    - (void)removeObjectAtIndex :( unsigned)index;


    注:可变数组还可以在特定索引处插入对象,替换对象,为数组排序,NSArray 还提供了大量好用的功能。 
    枚举: 
    NSEnumerator 用来描述这种集合迭代器运算的方法: 
    要想使用NSEnumerator,需要通过objectEnumerator 向数组请求枚举器: 
    - (NSEnumerator *) objectEnumerator;


    可以像这样使用这个方法: 
    NSEnumerator *enumerator; 
    enumerator = [array objectEnumerator ];


    注:若想从后向前枚举集合,使用方法reverseobjectEnumerator ; 也可以使用。 
    获得枚举器以后,开始while 循环,每次循环都向这个枚举器请求它的nextObject 
    - (id)nextObject;//返回nil 表明循环结束 
    注:在枚举的过程中不能改变数组容器。


    快速枚举示例: 
    for(NSString *string in array){ 
    NSLog(@"I found %@", string); 
    }


    数组排序: 
    例如:一条记录就是一条卡片的信息,包括(NSString *name 和NSString *email) 
    -(void)sort 

    [book sortUsingSelector:@selector(compareNames:)] 

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

      
    -(NSComparisonResult)compareNames:(id)element 

    return [name compare:[element name]]; 
    }


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

      
    使用dictionaryWithObjectsAndKeys :来创建字典 
    + (id)dictionaryWithObjectsAndKeys :( id)firstObject , . . .


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


    使用方法objectForKey :来获取字典中的值 
    - (id)objectForKey :( id)akey;


    查找轮胎可以这样: 
    Tire *tire = [tires objectForkey : @"front-left"]; 
    创建新的NSMutableDictionary 对象,向类NSMutableDictionary 发送dictionary 消息。也可以使用 dictionaryWithCapacity : 方法来创建新的可变字典 
    + (id)dictionaryWithCapacity :(unsigned int)numItems ; 
    可以使用方法setObject :forKey :方法给字典添加元素 
    setObject : forKey :( id)aKey


    下面是另一种使用发送dictionary 消息来创建字典的方法: 
    NSMutableDictionary *tires; 
    tires = [NSMutableDictionary dictionary] ; 
    [tires setObject :t1 forKey :@"front-left"]; 
    . . . 
    注:若对字典中已有的关键字使用setObject :forKey :方法,则用新的替换 
    可以使用removeObjectForKey : 方法来删除可变字典中的一个关键字 
    - (void)removeObjectForKey :(id)aKey ; 
    注:不要去创建NSString、NSArray 或NSDictionary 的子类,实在要的话可以用复合的方式来解决问题。


    使用这种方法枚举词典: 
    for(NSString *key in g) 

    . . . 
    }


    集合对象: 
    Set 是一组单值对象的集合,有可变和不可变,操作包括:搜索、添加、删除集合中的成员(仅用于可变集合)、比较两个集合,计算两个集合的交集和并集等。 
    #import <Foundation/NSSet.h> 
    常用的NSSet 方法

    方法

    说明

    +(id)setWithObjects:obj1,obj2,...,nil

    使用一列对象创建新集合

    -(id)initWithObjects:obj1,obj2,...,nil

    使用一列对象初始化新分配的集合

    -(NSUInteger)count

    返回集合的成员个数

    -(BOOL)containsObject:obj

    确定集合是否包含obj

    -(BOOL)member:obj

    使用isEqual:方法确定集合是否包含obj

    -(NSEnumerator *)objectEnumerator

    为集合中的所有对象返回一个NSEnumerator 对象

     

    -(BOOL)isSubsetOfSet:nsset

    确定receiver 的每个成员是否都出现在nsset 中

    -(BOOL)intersectsSet:nsset

    确定是否receiver 中至少一个成员出现在对象nsset 中

    -(BOOL)isEqualToSet:nsset

    确定两个集合是否相等


    常用的NSMutableSet 方法(NSSet 的子类)
    方法 说明

    -(id)setWithCapacity:size

    创建新集合,使其具有存储size 个成员的初始空间

    -(id)initWithCapacity:size

    将新分配的集合设置为size 个成员的存储空间

    -(void)addObject:obj

    将对象obj 添加到集合中

    -(void)removeObject:obj

    从集合中删除对象obj

    -(void)removeAllObjects

    删除接受者的所有成员

    -(void)unionSet:nsset

    将对象nsset 的所有成员昂添加到接受者

    -(void)minusSet:nsset

    从接受者中删除nsset 的左右成员

    -(void)intersectSet:nsset

    将接受者中的所有不属于nsset 的元素删除


    注:NSInteger 不是一个对象,基本数据类型的typedef,被typedef 成64 位的long 或32 位int 各种数值:
      
    NSNumber: 
    可以使用对象来封装基本数值。
      
    NSNumber 类来包装基本数据类型。 
    + (NSNumber *)numberWithChar :( char)value ; 
    + (NSNumber *)numberWithInt :( int )value ; 
    + (NSNumber *)numberWithFloat :( float)value ; 
    + (NSNumber *)numberWithBool :( BOOL)value ;
      
    还有包括无符号版本和各种long 型数据及long long 整型数据 
    例如:NSNumber *number = [NSNumber numberWithInt : 42] ;
      
    将一个基本类型封装到NSNumber 后,可以使用下列方法重新获得: 
    方法说明 
    +(id)setWithObjects:obj1,obj2,...,nil 使用一列对象创建新集合 
    -(id)initWithObjects:obj1,obj2,...,nil 使用一列对象初始化新分配的集合 
    -(NSUInteger)count 返回集合的成员个数 
    -(BOOL)containsObject:obj 确定集合是否包含obj 
    -(BOOL)member:obj 使用isEqual:方法确定集合是否包含obj 
    -(NSEnumerator *)objectEnumerator 为集合中的所有对象返回一个 
    NSEnumerator 对象 
    -(BOOL)isSubsetOfSet:nsset 确定receiver 的每个成员是否都出现在 
    nsset 中 
    -(BOOL)intersectsSet:nsset 确定是否receiver 中至少一个成员出现 
    在对象nsset 中 
    -(BOOL)isEqualToSet:nsset 确定两个集合是否相等 
    方法说明 
    -(id)setWithCapacity:size 创建新集合,使其具有存储size 个成员的初始空间 
    -(id)initWithCapacity:size 将新分配的集合设置为size 个成员的存储空间 
    -(void)addObject:obj 将对象obj 添加到集合中 
    -(void)removeObject:obj 从集合中删除对象obj 
    -(void)removeAllObjects 删除接受者的所有成员 
    -(void)unionSet:nsset 将对象nsset 的所有成员昂添加到接受者 
    -(void)minusSet:nsset 从接受者中删除nsset 的左右成员 
    -(void)intersectSet:nsset 将接受者中的所有不属于nsset 的元素删除 
    - (char)charValue; 
    - (int)intValue; 
    - (float)floatValue; 
    - (BOOL)boolValue; 
    - (NSString *)stringValue;
      
    NSValue: 
    NSNumber 实际上是NSValue 的子类,NSValue 可以封装任意值。可以用NSValue 将结构放入NSArray 和NSDictionary 中。 
    创建新的NSValue: 
    +(NSValue *)valueWithBytes : (const void *) value objCType : (const char *)type;

    @encode 编译器指令可以接受数据类型的名称并为你生成合适的字符串。 
    NSRect rect = NSMakeRect(1,2,30,40); 
    NSValue * value ; 
    value = [NSValue valueWithBytes : &rect objCType : @encode(NSRect)];
      
    使用getValue :来提取数值(传递的是要存储这个数值的变量的地址)(先找地址再取值) 
    value = [array objectAtIndex : 0]; 
    [ value getValue : & rect ] ;

    注:Cocoa 提供了将常用的struct 型数据转化成NSValue 的便捷方法: 
    + (NSValue *)valueWithPoint :( NSPoint)point ; 
    + (NSValue *)valueWithSize :( NSSize)size; 
    + (NSValue *)valueWithRect :( NSRect)rect ; 
    - (NSSize)sizeValue; 
    - (NSRect)rectValue; 
    - (NSPoint)pointValue;

    NSNull: 
    在关键字下如果属性是NSNull 表明没有这个属性,没有数值的话表明不知道是否有这个属性。[NSNull null] //总返回一样的值 
    + (NSNull *)null; 
    例如: 
    [contast setObject : [NSNull null] forKey: @"home"]; 
    访问它: 
    id home = [contast objectForKey : @"home" ] ; 
    if ( home = = [NSNull null] ) { 
    . . . 
    }

    NSFileManager 允许对文件系统进行操作(创建目录、删除文件、移动文件或获取文件信息) 
    //创建一个属于自己的NSFileManager 对象 
    NSFileManager *manager = [NSFileManager defaultManager] ; 
    //将代字符‘~’替换成主目录 
    NSString *home = [@"~" stringByExpandingTildeInPath] ; 
    //输出文件的扩展名 
    - (NSString *)pathExtension
  • 相关阅读:
    网管必备网站地址
    数组是否包含某个元素
    Thinking in java(八)
    Thinking in java(八)
    Java8系列之重新认识HashMap
    Java8系列之重新认识HashMap
    MarkdownPad2.5/2 注册码
    MarkdownPad2.5/2 注册码
    java8函数式编程(2)
    java8函数式编程(2)
  • 原文地址:https://www.cnblogs.com/needly/p/3630568.html
Copyright © 2011-2022 走看看