美文网首页
ios Objective-C 8.0 Foundation

ios Objective-C 8.0 Foundation

作者: Lost_Robot | 来源:发表于2018-09-04 18:07 被阅读9次

    Cocoa是由许多个不同的框架组成的,其中最常用于桌面端的OS X 应用程序的是Foundation框架和ApplicationKit,它包含了用户的界面UI对象和高级类。

          如果你打算开发ios平台上的应用程序,那么需要用到User Interface Kit(UIKit)框架。
    

    1.稳固的Foundation

    它是两类UI框架的基础,因为不包含UI对象,所以它的对象可以在ios和OS X应用程序中兼容。是以CoreFoundation为基础创建的,CoreFoundation是纯C语言写的。
    Foundation中有很对面向数据的简单类和数据类型:NSString、NSArray,NSEnumerator、NSNumber,大慨有100多个类。

    2.有用的数据类型

    Cocoa提供的结构体struct
    名称 结构体 描述 快捷函数
    范围 NSRange 表示相关事物的范围,字符串里的字符范围和数组里的元素范围 NSMakeRange()
    几何数据类型 CGPoint 表示笛卡尔平面中的一个坐标(x,y),由Core Graphics框架提供,以CG开头 CGPointMake()
    几何数据类型 CGSize 存储长度和宽度 CGSizeMake()
    矩形数据类型 CGRect 表示矩形的struct来表示形状 CGRectMake()

    用结构体的原因,是为了保证性能


    使用示例:
    //三种创建方式
    NSRange range;   //直接给字段赋值
    range.location = 17;
    range.length = 4;
    
    NSRange range = {17,4}   //C语言聚合结构赋值机制
    
    NSRange  range = NSMakeRange(17,4)  //Cocoa提供的快捷函数NSMakeRange()
    
    
    [anObject  flarbulateWithRange:NSMakeRange(17,4)]  //使用NSMakeRange的好处,可以在调用方法的时候作为参数传递
    
    

    3.字符串NSString

    不是结构体,而是一个真正的类。是不可变的immutable:即不可以添加或者删除字符,但是可以进行比较,或是赋值给别的变量

    创建字符串
    NSString  *height;
    height = [NSString stringWithFormate:@"your height is %d feet , %d inches",5,11];
    //结果:"your height is 5 feet , 11 inches"
    
    //stringWithFormate  是一个类方法,工厂方法
    

    思考:
    1.什么是类方法和工厂方法,类方法的修饰符是什么?
    2.类方法的作用与好处?
    3.类方法是否可以访问全局数据?
    4.什么是实例方法,修饰符是什么?

    AppKit中的NSColor和UIKit中的UIColor类都拥有一个中颜色命名的类方法:
    redColor\blueColor

    NSColor   *haveTheBlues = [NSColor blueColor]
    UIColor   *blueMan = [UIColor blueColor]
    
    关于字符串大小
    NSUInteger length = [height length];
    
    if([height length] > 35){
    
        NSLog(@"wow,you're really tall !");
    }
    
    字符串比较
    方法名 返回值 描述
    isEqualToString BOOL 比较两个字符串的内容是否相同
    compare enum (NSComparisonResult) 比较两个字符串在字母表中的位置,区分大小写的比较
    hasPrefix BOOL 字符串以什么开始
    hasSuffix BOOL 字符串以什么结尾
    rangeOfString NSRange 字符串中是否包含子字符串
    NSString  *str1 = @"hello 5";
    NSString  *str2 = [NSString stringWithFormat:@"hello %d",5];
    
    if([str1 isEqualToString: str2]){
        NSLog(@"They are the same !");
    }
    
    

    有待补充

    4.可变的字符串NSMutableString

    创建NSMutableString,使用stringWithCapacity方法,NSMutableString是NSString的子类。

    方法名 描述
    appenString 添加字符串到末尾
    appendFormat 将格式化的字符串添加的末尾
    deleteCharactersInRange 删除字符串中的字符
    //有待补充
    

    5.集合这大家族

    名称 描述 备注
    NSArray 存储对象的有序列表 1.只能存储OC的对象,不能存储原始的C语言基础数据类型:int、float、enum、struct。
    2.不能存储nil(对象的0值和null值)
    NSMutableArray 可变数组类 弥补NSArray的不足,可以添加和删除数组中的对象
    NSDictionary
    5.1关于NSArray

    创建NSArray,使用arrayWithObjects方法。NSArray是不可变对象的数组,不能删除和添加对象,但是可以修改对象的值。count方法返回集合的对象个数、objectAtIndex返回特定索引处的对象。

    NSArray *array = [NSArray arrayWithObjects:@“one”,@"two",@"three",nil];  //NSString 组成的含有3个元素的数组
    
    NSString *array2 = @[@"one",@"two",@"three"]
    //array和array2的内容一样
    
    //使用字面量语法时不用再结尾处特意补上nil
    

    NSArray的方法

    名称 描述 返回值
    count 包含对象的个数 NSUInteger
    objectAtIndex:index(NSUInteger) 特定索引处的对象 id
    componentsSeparatedByString 切割字符串为Array NSArray
    componentsJoinedByString 合并Array的内容为一个String String
    
    //1.类C语言语法
    id  *myObject = array[1];
    //2.objectAtIndex方法
    for(NSInteger i = 0;i<[array count];i++){
      NSLog(@"index %d   has  %@." ,i,[array objectAtIndex:i]);
    
    }
    //数组字面量语法
    for(NSInteger i = 0;i<[array count];i++){
      NSLog(@"index %d   has  %@." ,i,array[i]);
    
    }
    
    NSString  *str = @"un:oop:fs:ns";
    NSArray  *chunks = [string  componentSeparatedByString:@":"];
    //chunks = ["un","oop","fs","ns"]
    NSString string = [chunks  componentsJoinedByString:@"?"]
    //string = "un?oop?fs?ns"
    
    
    5.2关于NSMutableArray

    可变数组,弥补了NSArray的不足,使用arrayWithCapacity来创建数组,没有使用字面量创建的语法。

    方法:
    名称 描述
    addObject 在数组末尾添加数组对象
    removeObjectAtIndex 删除特定索引处的对象
    NSMutableArray  *array = [NSMutableArray  arrayWithCapacity:17];
    
    Car  car = [Car new]
    [array  addObject:car]  //添加一辆车
    [array removeObjectAtIndex:2]  //删除第3个车
    
    
    5.3枚举

    NSArray经常要对数组中的每个元素执行相同的操作,Cocoa可以用NSEnumerator来表示集合中迭代出的对象。要使用NSEnumerator需要通过objectEnumerator向数组请求枚举器,nextObject获取下一个元素,如果返回nil则表示结束了。

    NSEnumerator  *enumerator = [array objectEnumertor];
    
    while(id thingie = [enumerator  nextObject]){
    
        NSLog(@"i  found  %@",thingie);
    }
    
    5.4快速枚举

    OC语言升级到2.0 就有优化后的快速枚举。

    for(NSString  *string in array){
    
          NSLog(@"I  found  %@",string);
    }
    

    由于只有2.0才有这个功能,所以苹果公司添加了一个能在NSArray中通过代码块 枚举对象的方法,但是代码块只在Apple LLVM编译器上才会有效。

    [array  enumerateObjectsUsingBlock:^(NSString *string,NSUInteger idnex,BOOL *shop){
            NSLog(@"I found  %@",string);
    }];
    

    这里有4中遍历数组的方式:index,枚举器,快速枚举,代码块;

    5.5NSDictionary字典

    字典是关键字及其定义的集合。又称为散列表和关联数组。使用键值查询,对于频繁的查询和大型的数据来说,用字典比数组要快得多。

    NSDictionary 是不可变字典。
    创建方式:

    • 字典字面量语法
    • dictionaryWithObjectsAndKeys
    Tire *t1 = [Tire new];
    Tire *t2 = [Tire new];
    Tire *t3 = [Tire new];
    Tire *t4 = [Tire new];
    
    //dictionaryWithObjectsAndKeys 创建
    NSDictionary  *tires = [NSDictionary dictionaryWithObjectsAndKeys:t1,@"front-left",t2,@"font-right",t3,@"back-left",t4,@"back-right",nil]
    
    //字面量创建
    NSDictionary  *tires = @{@"font-left":t1,@"font-right":t2,@"back-left":t3,@"back-right":t4}
    
    
    方法:
    名称 描述
    objectForKey 传递前面用来存储的关键字,访问字典中的值
    Tire *tire = [tires objectForKey:@"back-right"];
    
    Tire *tire =tire[@"back-left"]  //如果没有back-left则返回nil
    
    NSMutableDictionary 可变字典

    可以添加或是删除字典中的对象。

    创建方式:

    • dictionaryWithCapacity
    • setObject:forKey //添加对象,替换对象
    • 无字面量语法
    NSMutableDictionary  *tires = [NSMutableDictionary  dictionaryWithCapacity:17];   //17只是作为字典大小的参考值,实际对象个数是可以超过17的
    
    
    //像NSMutableDictionary发送dictionary消息,便可以创建新的可变字典NSMutableDictionary对象
    NSMutableDictionary  *tires = [NSMutableDictionary  dictionary];
    [tires setObject:t1 forkey:@"font-left"];
    [tires setObject:t2 forkey:@"font-right"];
    [tires setObject:t3 forkey:@"back-left"];
    [tires setObject:t4 forkey:@"back-right"];
    
    
    [tires removeObjectForKey:@"back-left"]  //removeObjectForKey删除对象
    

    注意:
    NSArray 和NSDictionary只能存储对象,不能直接存储任何基本类型的数据。

    6.NSNumber类

    NSNumber类来封装基本数据类型。

    创建方式:
    • 字面量语法
    • numberWithChar
    • numberWithInt
    • numberWithFloat
    • numberWithBool
    • .....等

    将基本类型数据封装到NSNumber中后,可以通过下面的实例方法来重新获得。

    • charValue
    • intValue
    • floatValue
    • boolValue
    • stringValue
    NSNumber *number;
    number = @'X';//字符型
    number = @12345 ;//整型
    number = @12345ul ;//无符号长整型
    number = @12345ll;//long long
    number = @123.45f;//浮点型
    number = @123.45;//双浮点型
    number = @YES; //布尔值
    
    NSNumber *number2 = @42;
    [array addObject number];
    [dictionary  setObject:number   forKey:@"Bork"];
    
    NSString   str = [number2  stringValue];
    
    
    6.2 NSValue

    NSNumber 实际上NSValue的子类,NSValue可以封装任意值。

    创建方式:
    • valueWithBytes:value objCType:type

    eg:将NSRect放入NSArray中

    NSRect  rect = NSMakeRect(1,2,20,40);
    NSValue  *value = [NSValue  valueWithBytes:&rect  objCType:@encode(NSRect)];
    [array  addObject:value];
    
    //使用getValue来提取数值,参数传递变量的地址用&符号
    value = [array  objectAtIndex:0];
    [value getValue:&rect];
    
    

    cocoa提供了将struct型数据转换为NSValue的便捷方法

    • valueWithPoint
    • valueWithSize
    • valueWithRect
    • pointValue
    • sizeValue
    • rectValue
    value = [NSValue valueWithRect:rect];
    [array addObject:value];
    ....
    NSRect anotherRect = [value rectValue];
    
    
    6.3 NSNull

    在Array和dictionary中不能存储nil因为nil在这里面有特殊的含义,所以当你实在是需要在Array中存储空值时,使用NSNull便可以。NSNull可能是cocoa中最简单的类了,他只有一个方法null;

    //添加null到集合
    [contact setObject:[NSNull null] forKey:@"home  fax machine"];
    
    //访问他的方式
    id  homefax = [contact objectForKey:@"home fax  machine"];
    if(homefax == [NSNull  null]){
    
        ........
    }
    
    
    7.实战查找文件,遍历文件

    后续实现....

    相关文章

      网友评论

          本文标题:ios Objective-C 8.0 Foundation

          本文链接:https://www.haomeiwen.com/subject/erofmftx.html