黑马程序员-iOS基础-Foundation框架基础

来源:互联网 发布:ai印花软件 编辑:程序博客网 时间:2024/05/22 14:00

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

黑马程序员-iOS基础-Foundation框架基础

一、Foundation框架基础

   作用:Foundation框架是其他所有IOS框架的基础

   包含了很多开发中常用的数据类型:结构体;枚举;类等。

   使用方法: 想要使用Foundation框架中的数据类型,包含它的主文件即可

二、OC结构体

1、NSRange(范围)

 成员:

  location位置:NSUInteger

  length长度:NSUInteger

 定义方式

 要求掌握

   NSMakeRange(int location, int length);

   NSString的rangeOfString方法
    
   在查找字符串的情况下,如果可以查找到,则location是有一个正值的,但如果查找不到,返回的是NSNotFound,而且NSNotFound=-1。

2、NSPoint/CGPoint

 成员:两个CGFloat/double型变量x和y

 作用:用来表示屏幕上的一个点

 定义方式
  
 开发中常用CGPoint(跨平台)

 定义函数

  NSMakePoint

  CGPointMake

3、NSSize/CGSize

 成员:两个CGFloat/double型变量width和height

 作用:用来表示UI元素的尺寸

 定义方式

 定义函数

  NSMakeSize

  CGSizeMake

4、NSRect/CGRect

 成员:

  CGPoint(Rect左上角点的位置)

  CGSize

 作用:表示屏幕上的一块区域

 定义方式

 定义函数

  NSMakeRect

  CGRectMake

5、将结构体转换为字符串的函数

 NSStringFromRange

 NSStringFromPoint

 NSStringFromSize

 NSStringFromRect

举例:
 
 

6、常量

 CGPointZero指坐标原点

 CGSizeZero

 CGRectZero

 使用CG开头的常量和函数要添加CoreGraphics框架

7、其他用法

 CGPointEqualToPoint 比较两个点释放相同,另有相同的Size和Rect函数

 CGRectContainsPoint 判断举行是否包含某个点

三、Foundation常用类

1、NSString字符串

    字符串创建

            对象方法

                    1.最普通简单的字符串

 NSString *s1 = @"4654651"; 

                    2.带参数的组合字符串

[[NSString alloc] initWithFormat:@"age is %d", 10];

                    3.C字符串转换为OC字符串

[[NSString alloc] initWithUTF8String:"Jack"];

                    4.从文件读取字符串

NSString *s4 = [[NSString alloc] initWithContentsOfFile:@"/Users/apple/Desktop/1.txt" encoding:NSUTF8StringEncoding error:nil ];   // NSUTF8StringEncoding 用到中文就可以用这种编码

                    5.从本地或者网络读取资源转换成字符串

    NSURL *url = [[NSURL alloc] initWithString:@"file:///Users/apple/Desktop/1.txt"]    NSString *s5 = [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil ];    // URL: 资源路径    // 协议头://路径   Http://->网络   file://->本地   ftp://->

             类方法(常用)

        NSString *s6 = [NSString stringWithFormat:@"5465"];NSString *s7 = [NSString stringWithContentsOfFile:@"/Users/apple/Desktop/1.txt" encoding:NSUTF8StringEncoding error:nil ]; // 创建本地文件的URLNSURL *url1 = [NSURL fileURLWithPath:@"/Users/apple/Desktop/1.txt"]; // 最普通的创建URL的类方法NSURL *url2 = [NSURL URLWithString:@"file:///Users/apple/Desktop/1.txt"];NSString *s8 = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil ];

 字符串的导出

[@"Jack\nJack" writeToFile:@"/Users/apple/Desktop/1.txt" atomically:YES encoding:NSUTF8StringEncoding error:nil ];    // atomically:原子性:若写入新文件时中断,YES则文件不会创建,NO时会创建//另有类似的writeToURL方法

 子类NSMutableString可变字符串(继承自NSString,拥有NSString的方法)

  字符串拼接

   appendString

   appendFormat

  删除字符串中某个范围内的字符

        // 删除s1中的is方法1[s1 deleteCharactersInRange:NSMakeRange(4, 2)];// 删除s1中的is方法2NSRange range = [s1 rangeOfString:@"is"]; // 获取is的范围[s1 deleteCharactersInRange:range];

 2、NSArray数组

        数组的创建

             OC数组只能存放OC对象,不能存放非OC对象类型,如int、struct、enum等

             不能存放nil值

// 创建数组NSArray *array = [NSArray array]; // 这个array永远是空数组NSArray *arr1 = [NSArray arrayWithObject:@"Jack"];NSArray *arr2 = [NSArray arrayWithObject:@"Jack", @"Rose", nil]; // nil是数组元素结束的标记NSArray *arr3 = @[@"Jack", @"Rose", @"dack"]; // 快速创建一个NSArray对象,尽量用这种

        获取数组元素个数

    // 获取数组元素个数    [arr2 count];    arr2.count; // count是获取数组元素个数的方法 

        访问数组中的元素

    // 访问数组中的元素    [arr2 objectAtIndex:1]; // 最原始的方法    arr2[0];// OC编译器特性也支持此格式

        遍历数组中的元素

        // 遍历数组中的元素NSArray *arr4 = @[@"Jack", @"Rose", @"dack", @"bitch", @"fuck", nil];// 最普通的写法for(int i = 0 ; i < arr4.count ; i++){NSLog(@"%@", arr4[i]);}// 快速遍历,id obj代表数组中的每一个元素for(id obj in arr4){// 找出obj元素在数组中的位置NSUInteger i = [arr4 indexOfObject:obj];NSLog(@"%ld - %@", i, obj);}// block遍历[arr4 enumerateObjectsUsingBlock:// 每遍历到一个元素,就调用一次block// 并且当前元素和索引位置当做参数传给block^(id obj, NSUInteger idx, BOOL *stop){NSLog(@"%ld - %@", idx, obj);// 停止遍历if(idx == 1){*stop = YES;}}];

        子类NSMutableArray可变数组

        NSMutableArray *marray = [NSMutableArray array];NSMutableArray *marray1 = [NSMutableArray arrayWithObjects:@"rose", @"jim", nil];// OC数组不能放基本数据类型、结构体、枚举等,也不可以是nil// addObject:向可变数组中添加元素[marray addObject:[[Person alloc] init]];[marray addObject:@"Jack"];/* 错误写法[marray addObject:10];[marray addObject:nil];*/// 移除所有元素[marray removeAllObjects];// 移除指定元素[marray1 removeObject:@"Jack"];// 按索引移除指定元素[marray removeObjectAtIndex:2];// 错误写法// @[] 只创建不可变数组NSArrayNSMutableArray *array = @[@"jack", @"rose"];[array addObject:@"jim"];

3、NSSet

创建方法

      set 创建,没有元素

      setWithObject 单个元素

      setWithObjects 多个元素

访问元素

      anyObject 随机,不确定是哪个

元素个数

      count

如:

NSSet *s = [NSSet set];NSSet *s2 = [NSSet setWithObjects:@"jack", @"rose", @"scort", @"sam", nil]; // 初始化setNSString *str = [s2 anyObject]; // 访问set中的元素NSLog(@"%@", str);NSLog(@"%ld", s2.count);

子类NSMutableSet

      set 创建

      addObject 增加元素

      removeObject 移除指定元素元素

NSMutableSet *s = [NSMutableSet set];[s addObject:@"hack"]; // 添加元素[s removeObject:@"jack"]; // 移除元素

NSSet与NSArray的异同点

 1、共同点

  * 都是集合,都能存放多个OC对象

  * 只能存放OC对象,不能存放非OC对象类型,如基本数据类型、结构体struct、枚举enum

  * 都有一个可变的子类,本身是不可变的

 2、不同点

  * NSArray是有顺序的,NSSet没有顺序

4、NSDictionary字典

 创建

        NSDictionary *dict4 = @{@"name" : @"jack", @"address" : @"Beijing", @"QQ" : @"djaf"};        // 此处是利用了编译器特性,将键值对逐个写入,但是存储时是无序的        // 创建只有一个键值对的字典NSDictionary *dict = [NSDictionary dictionaryWithObject:@"jack" forKey:@"name"]// 根据键值数组创建多个键值对的字典NSArray *keys = @[@"name", @"address"];NSArray *objects = @[@"jack", @"Beijing"];NSDictionary *dict2 = [NSDictionary dictionaryWithObjects:objects forKeys:keys];// 创建多个键值对的字典NSDictionary *dict3 = [NSDictionary dictionaryWithObjectsAndKeys:@"jack", @"name",@"Beijing", @"address",@"45123", @"QQ", nil];

 访问键值对

        // 根据键获取对应值id obj = [dict ObjectForKey:@"name"];// 编译器特性快速获取键值id obj = dict[@"name"];

 统计键值对数

NSLog(@"%ld", dict.count); // count返回键值对数

 字典的遍历

        // 字典不允许有相同的key,但允许有相同的value// 字典是无序的// 遍历NSDictionary *dict4 = @{@"name" : @"jack", @"address" : @"Beijing", @"QQ" : @"djaf"};// 用for循环遍历NSArray *keys = [dict4 allKeys]; // 取key至一个数组中,但key无序for(int i=0; i<dict.count; i++){NSString *key = keys[i];NSString *object = dict[key];NSLog(@"%@ = %@", key, object);}// 用block遍历 (提示的时候双击或者回车即可)[dict4 enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop){NSLog(@"%@ = %@", key, obj);*stop = YES; // 遍历一次即退出}];

 子类NSMutableDictionary

        NSMutableDictionary *dict = [NSMutableDictionary dictionary];// 添加键值对,没有顺序之分的[dict setObject:@"jack" forKey:@"name"];[dict setObject:@"Beijing" forKey:@"address"];[dict setObject:@"rose" forKey:@"name"]; // 这里会把前面对应的值覆盖掉[dict removeObjectForKey:@"name"]; // 根据键移除键值对NSLog(@"%@", dict);/* 错误写法  @{key : value,...}返回值是不可变字典NSMutableDictionary *dict = @{@"name" : @"jack", @"address" : @"Beijing", @"QQ" : @"djaf"};[dict setObject:@"rose" forKey:@"name"];*/


5、NSNumber

 作用:将基本数据类型包装为OC对象

 创建方法:

  @+数字(编译器特性)

        // 编译器特性 @+number 创建NSNumber类型对象NSNumber *nn = @30;int age = 100;@(age); // 将age包装成NSNumber对象// 将各种基本数据类型包装成NSNumber对象@10.5;@YES@'a' // NSNumber对象@"a" // NSString对象

  其他

// NSNumber的创建NSNumber *num = [NSNumber numberWithInt:10]NSNumber *n = [NSNumber numberWithDouble:10.5];

  基本数据类型与NSString类型转换

// 基本数据类型与NSString类型转换int a = 20;NSString *str = [NSString stringWithFormat:"%d", a];int e = [str intValue];

  基本数据类型与NSNumber类型转换

// 基本数据类型与NSNumber类型转换NSNumber *n = [NSNumber numberWithDouble:10.5];double d = [n doubleValue];


 6、NSValue

 作用:将非OC类型包装成OC对象

  NSNumber之所以能包装基本数据类型为对象,是因为继承了NSValue

        // NSNumber之所以能包装基本数据类型为对象,是因为继承了NSValueCGPoint p = CGPointMake(10, 10);// 将结构体包装为Value对象NSValue *value = [NSValue valueWithPoint:p];// 解包装为NSPoint/CGPoint类型[value pointValue]; 

7、NSDate

 作用: 对时间进行操作

 方法

  创建方法

        // 创建一个时间对象NSDate *date = [NSDate date];

  其他方法

// 创建一个时间对象NSDate *date = [NSDate date];// 打印的时间是0时区格林尼治时间(北京-东八区)NSLog(@"%@", date);// 比date晚5秒的时间NSDate *date2 = [NSDate dateWithTimeInterval:5 sinceDate:date];// 从1970年开始走过的秒数NSTimeInterval seconds = [date2 timeIntervalSince1970];

 时间格式化,需要调用NSDateFormatter类

NSDate不能直接在屏幕显示,必须转换成NSString

  NSDate->NSString

        // 时间格式化NSDate *date = [NSDate date];// 显示Date必须先转换成字符串// 日期格式化类NSDateFormatter *formatter = [[NSDateFormatter alloc] init];// y 年 M 月 d 日 m 分 s 秒 H (24)时 h(12)时formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss"; NSString *str = [formatter stringFromDate:date];

  NSString->NSDate

// 字符串时间转换为NSDate型NSString *time = @"2011/09/10 18:16";NSDateFormatter *formatter = [[NSDateFormatter alloc] init];formatter.dateFormat = @"yyyy-MM-dd HH:mm";NSDate *date3 = [formatter dateFromString:time];


0 0
原创粉丝点击