ios Objective-C 8.0 Foundation

2018-09-04  本文已影响9人  Lost_Robot

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 是不可变字典。
创建方式:

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 可变字典

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

创建方式:

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类来封装基本数据类型。

创建方式:

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

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可以封装任意值。

创建方式:

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的便捷方法

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.实战查找文件,遍历文件

后续实现....

上一篇下一篇

猜你喜欢

热点阅读