黑马程序员 OC框架: Foundation

来源:互联网 发布:淘宝订单数据跟踪 编辑:程序博客网 时间:2024/04/28 13:40

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——

常用结构体

NSRange

查找某个字符串在 str 中的范围

Range 结构体 有两个元素
length 和 location

快速定义 NSRange :

NSRange r = NSMakeRange(2, 4);

获得字符串的 Range 信息

NSString *s = @“hello world!”;NSRange r = [s rangOfString:@“ll”];

结果 :

r.length = 2r.location = 2

若找不到 :

length = 0location = NSNotFound  ( 实际值为 -1 )

CGpoint/ NSpoint

CGpoint = NSpointCGpoint 是跨平台的,在开发中常用.

快速创建方法 :

CGPoint p1 = CGPointMake(10,9); //开发中常用NSPoint p2 = NSMakePoint(120,20);

CGSize/NSSzie

NSSzie s1 = CGSizeMake(100, 50);NSSzie s2 = NSMakeSize(20,20);

结构体打印

    NSRect r1 = CGRectMake(0, 0, 100, 50);    NSString *str = NSStringFromRect(r1);    NSLog(@"%@", str);

打印结构体的常用方法是先转换成字符串再打印

补充

CGPointZero == CGPointMake(0,0); 这种便捷的方法比较常用CGPointEqualToPoint(p1 ,p2);   比较两个点是否相同CGRectContainsPoint(Rect, Point)  判断矩形中是否包含这个点

CG 开头的函数依赖于 CoreGraphics 框架,而一般默认就有这个框架

这些函数功能的声明在 Foundation 框架中, 定义在 CoreGraphics 框架中.

Foundation 常用类

NSString—>NSMutableStringNSArray—>NSMutableArrayNSSet—>NSMutableSetNSDictionary—>NSMutableDictionary

以上都是集合类 . 用法都非常类似.

NSString

不可变字符串的创建

    NSString *s1 = @"234234";    NSString *s2 = [[NSString alloc] initWithSting:@”123123”]    NSString *s3 = [[NSSting alloc] initWithFormat:@“age is %d”, 10];

转换

    NSString *s4 = [[NSString alloc] initWithUTF8String:”jack”]; // c 字符串—>oc 字符串    const char *cs = [s4 UTF8String]; //oc字符串转 c 字符串// 文件内容转 NSString    NSString *s5 = [[NSString alloc] initWithContentsOfFile:@“文件路径” encoding:NSUTF8StringEncoding error:nil];// NSUTF8StringEncoding 用到中文就可以用这种方法

NSMutableString : 可变字符串

NSString 的子类

创建和使用

NSMutableString *s1 = [NSMutableString stringWithFormat:@"age is 10"];[s1 appendString:@“ 11 12”]; // 字符串拼接[s1 deleteCharactersInRange:NSMakeRange(4, 2)];  // 删除指定范围字符串

比较稳妥的方法

NSRange range = [s1 rangeOfString:@"is"];[s1 deleteCharactersInRang:range];

创建一个新的拼接后的字符串

NSString *s2 = [NSString stringWithFormat:@"age is 10"]NSString *s3 = [s2 stringByAppendingString:@“ 11 12”]; 

URL

URL   : 资源路径协议头 :// 路径file  :// 本地资源ftp   ://http  ://weibo.com/a.png

URL 使用方法

NSURL *url = [[NUSRL alloc] initWithString:@"file:// /Users/apple/Desktop/1.txt"]; // 字符串转 URLNSString *s6 = [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil]; // URL 链接中的资源内容转 NSString/* 一般都会有一个类方法跟对象方法配对[NSString stringWithFormat:@“”];  用类方法来初始化会更方便[NSString stringWithContentsOfFile: ………];[NSURL URLWithString:(NSString *)];[NSURL fileURLWithPath:@“/Users/apple/Desktop/1.txt”];*/

NSArray

oc 数组只能存放 oc 对象.不能存放非 oc 对象类型.比如 int/ struct/ enum 等就不能存放

创建 oc 数组

NSArray *array = [NSArray arrayWithObject:@"jack"]; // 就一个元素NSArray *array2 = [NSArray arrayWithObject:@"jack",@"rose",nil]; // nil 是数组结束的标记NSLog(@“%ld”, array2.count);

打印数组元素

NSLog(@"%@", [array2 objectAtIndex:1];NSLog(@"%@", array2[1]); 语法糖

快速创建一个 NSArray 对象 只能创建不可变数组

NSArray *array3 = @[@"jack",@"rose",nil];

快速遍历oc 数组

for (int i = 0; i<array.count; i++){    NSLog(@"%@", array[i]);}// id obj代表着数组中的每一个元素for (id obj in array){    NSLog(@"%@", obj);}  // 找出 obj 元素在数组中的位置for (id obj in array){    NSUInteger i = [array indexOfObject:obj];    NSLog(@"%ld - %@", i, obj)}// 使用代码块. 每遍历到一个元素,就会调用依次 block// 并且当前元素和索引位置当做参数传给 block[array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop){    NSLog(@"%ld - %@", idx, obj);    if (idx == 1)    {        *stop = YES; // stop 为停止指针,退出条件    }}];

NSMutableArray

NSMutableArray *array = [NSMutableArray array];[array addObject:@"jack"];  // 可以添加任意对象

删除所有元素

[array removeAllObjects];

删除指定的对象

[array removeObject:@“jack”];[array removeObjectIndex:2]; 

NSSet/NSMutableSet

NSSet中的元素没有顺序

NSSet *s = [NSSet set];NSSet *s2 = [NSSet setWithObject:@"jack",@"rose",nil];NSLog(@“%ld”, s2.count];

随机拿出一个元素

NSString *str = [s2 anyObject]; 

NSSet 和 NSArray 的对比

1> 共同点

* 都是集合,都能存放多个 oc 对象*只能存放 oc 对象,不能存放非 oc 对象类型*本身都不可变,都有一个可变的子类

2>不同点

*NSArray 是有序的, NSSet 是无序的.

NSDictionary

 key ----> value 索引 ----> 文字内容

字典里面存的东西都是键值对.

创建与查看 :

    //    NSDictionary *dict = [NSDictionary dictionaryWithObjects:@"jack" forKeys:@"key"];    NSDictionary *dict = @{@"name": @"jack",@"address" : @"北京"};    //    id obj = [dict objectForKey:@"name"];    id obj = dict[@"name"];    NSLog(@"%@", obj);    NSLog(@"%ld", dict.count); // 返回键值对的个数

遍历字典

NSDictionary *dict = @{                        @"name" : @"jack",                        @"address" : @"北京",                        @"qq" : @"123124"};    [dict enumerateKeysAndObjectsUsingBlock:     ^(id key, id obj, BOOL *stop) {         NSLog(@"%@ - %@", key, obj);     }];

NSMutableDictionary

    NSMutableDictionary *dict = [NSMutableDictionary dictionary];    [dict setObject:@"jack" forKey:@"name"];    [dict setObject:@"北京" forKey:@"adress"]; // 重复的键值对会覆盖    [dict removeObjectForKey:@"name"]; //remove

oc 的方法都用英文写的非常直观了,所以英文好的会几乎都能猜出来它的方法.
所以,好好学习英语吧.

小结

1.NSArray\NSMutableArray

*有序*快速创建(不可变): @[]*快速访问元素: 数组名[i]

2.NSSet\NSMutableSet

*无序

3.NSDictionary\NSMutableDictionary

*无序*快速创建(不可变): @{key1 : value1, key2 : value2, key3 :value3}*快速访问元素: 字典名[key]

NSNumber

因为 oc 数组中不能存放除对象外的数据
所以 用 NSNumber 来进行转换

NSNumber *num = [NSNumber numberWithInt:10];int a = [num intValue];

语法糖来了,编译器特性让我们写程序方便不少.

@20 将 20 包装成一个 NSNumber 对象

用法如下

@YES@‘A’@“A”int age = 100;@(age);    将 age 变量包装成 NSNumber 对象

NSValue

NSNumber 之所以能包装基本数据类型为对象,是因为继承了 NSValue.NSValue 还能放 NSNumber 放不了的结构体等 

结构体—> oc 对象

CGPoint p = CGPointMake(10, 10);NSValue *value= [NSValue valueWithPoint:p];

—> 结构体

[value pointValue];

NSDate

 创建一个时间对象

NSDate *date = [NSDate date];
创建的内容就是当前时间

主要用法 :

    // 日期格式化类    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];    formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";    // H (24) 时制 h (12) 时制

获得当前格式的时间 String

NSString *str = [formatter stringFromDate:date];

String —> date

NSString *time = @“2012/12/1 18:40”;NSDateFormatter *formatter = [[NSDateFormatter alloc] init];formatter.dateFormat = @"yyyy/MM/dd HH:mm";NSDate *date = [formatter dateFromString:time];
0 0