黑马程序员————Foundation框架_知识总结(下)

时间:2023-02-18 22:36:23
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- Foundation框架中常用的类
    /*
NSString (NSMutableString)
NSArray (NSMutableArray)
NSSet (NSMutableSet)
NSDictionary (NSMutableDictionary)
*/

一、NSArray与NSMutableArray

1.NSArray的创建
OC数组不能存放nil值 OC数组只能存放oc对象,不能存放非oc对象类型,如int、struct、enum等
    
// NSArray是不可变数组,这个array永远是空数组
NSArray *array = [NSArray array];

// 创建单个对象
NSArray*array2 = [NSArray arrayWithObject:@"jack"];

// 创建多个对象,nil是数组元素结束的标记
NSArray *array3 = [NSArray arrayWithObjects:@"jack",@"Rose" ,nil];

// NSArray *array4 = [NSArray arrayWithObjects:@"jack",@"Rose",@"jim" ,nil];
//快速创建一个NSArray对象
NSArray *array4 = @[@"jack",@"Rose",@"jim"];

// NSArray的元素个数
NSLog(@"%ld",array3.count);

// NSArray的元素访问
NSLog(@"%@",[array3 objectAtIndex:1]);

// 通过下标快速访问元素
NSLog(@"%@",array3[0]);

2.NSArray的遍历

1)l用for循环遍历
    
// for循环遍历
Person *p = [[Person alloc] init];
NSArray *array = @[p, @"jack"];
for(int i = 0;i<array.count;i++)
{
NSLog(@"%@",array[i]);
}

2)用for(id obj in 数组名)方式遍历
    // id obj代表数组的位置
for(id obj in array)
{
// 找obj元素在数组中的位置
NSUInteger i = [array indexOfObject:obj];
NSLog(@"%@",obj);
}

3)用enumerateObjectsUsingBlock遍历
<pre name="code" class="objc">    // 每遍历到一个元素,就会调用一次block,并且当前元素和索引位置当做参数传给block
[array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop)
{
NSLog(@"%ld-%@",idx,obj);

// 可以控制停止遍历
if(idx == 1);
*stop = YES;
}];

3.NSMutableArray的创建与删除元素

1)创建NSMutableArray数组
<pre name="code" class="objc">    // 创建NSMutableArray    NSMutableArray *array = [NSMutableArray array];    NSMutableArray *array2 = [NSMutableArray arrayWithObjects:@"jake",@"Rose",@"jim", nil];        // 添加元素    [array addObject:[[Person alloc] init]];    [array addObject:@"jack"];        // 错误写法    //[array addObject:nil];        NSLog(@"%ld",array.count);
</pre>
NSArray没有addobject:id这个方法,不可调用

2)删除元素
    // 删除所有元素
[array removeAllObjects];

// 删除指定对象
[array removeObject:@"jack"];

// 删除第二个元素
[array removeObjectAtIndex:1];

NSLog(@"%@",array);

3)经典错误

    // @[]只创建不可变数组NSArray
NSArray *array4 = @[@"jack"];

// 错误写法,返回的是NSArray不可变数组,NSMutableArray没有@[]的快速创建方法
NSMutableArray *array3 = @[@"jack",@"rose"];

// 发送错误
[array addObject:@"jim"];

二、NSSet与NSMutableSet

1.NSSet的创建
    NSSet *s = [NSSet set];

// 创建NSSet
NSSet *s2 = [NSSet setWithObjects:@"jack",@"Rose",@"jim", nil];

// 随机取出一个元素
NSSet *str = [s2 anyObject];

// 打印s2元素个数
NSLog(@"@ld",s2.count);

// 输出元素
NSLog(@"%@",str);

2.NSMutableSet的创建
    NSMutableSet *s = [NSMutableSet set];

// 增加元素
[s addObject:@"jack"];

// 删除元素
[s removeObject:@"jack"];

3.总结比较NSArray和NSSet的区别

共同点
1)都是集合,都能存放多个oc对象 2)本身都不可变,都有一个可变的子类 3)只能存放oc对象,不能存放非oc对象类型(基本数据类型:int、double、char等)
不同点
NSArray有顺序,NSSet没有顺序
三、NSDictionary与NSMutableDictionary
1.NSDictionary的创建
    NSDictionary *dict = [NSDictionary dictionaryWithObject:@"jack" forKey:@"name"];

id obj = [dict objectForKey:@"name"];

NSLog(@"%@",obj);

    // 通过键集合数组和值集合数组创建
NSArray *keys = @[@"name",@"address"];

NSArray *objects = @[@"jack",@"北京"];

NSDictionary *dict = [NSDictionary dictionaryWithObjects:objects forKeys:keys];

id obj = [dict objectForKey:@"address"];

NSLog(@"%@",obj);

    // 较为麻烦的创建方式
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
@"jack",@"name",
@"北京",@"address", nil];

id obj = [dict objectForKey:@"name"];

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

    // 简单快速创建
NSDictionary *dict = @{@"name" : @"jack", @"address" : @"北京"};

// 简单访问oc数组里面的内容
id obj = dict[@"name"];

NSLog(@"%@",obj);

2.NSMutableDictionary的基本使用

    NSMutableDictionary *dict = [NSMutableDictionary dictionary];

// 添加键值对
[dict setObject:@"jack" forKey:@"name"];

[dict setObject:@"北京" forKey:@"address"];

// 为同一个key增加对象会覆盖之前的对象
[dict setObject:@"Rose" forKey:@"name"];

NSString *str = dict[@"name"];

// 删除键值对
[dict removeObjectForKey:@"name"];

// 错误写法,@{}创建的是不可变字典,返回的是NSDctionary类型对象,是不可变的
NSMutableDictionary *dict2 = @{@"name":@"jack"};

[dict setObject:@"rose" forKey:@"name"];

NSLog(@"%@",str);


3.NSDictionary 字典的遍历

1)第一种遍历方式
    NSDictionary *dict = @{
// 字典是无序的,不允许有相同的key,但循允许有相同的value
@"name" : @"jack",
@"name2" : @"jack",
@"name3" : @"jack",
@"address" : @"北京",
};
// 取出所有key
NSArray *keys = [dict allKeys];

for(int i = 0;i<dict.count;i++)
{
NSString *key = keys[i];
NSString *obj = dict[key];
NSLog(@"%@-%@",key,obj);
}


2)第二种遍历方式

    [dict enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
NSLog(@"%@-%@",key,obj);
// 只遍历一次就停止
//*stop = YES;
}];


四、NSNumber和NSValue
1.NSNumber
1)将基本数据类型转换成对象
<pre name="code" class="objc">    // 包装基本数据类型
NSNumber *num = [NSNumber numberWithInt:10];

// 放入集合对象
NSDictionary *dict =@{

@"name" : @"jack",

@"age" : num

};

// 取出NSNumber对象
NSNumber *num2 = dict[@"age"];

// 转换成基本数据类型
int a = [num2 intValue];
NSLog(@"%d",a);



<pre name="code" class="objc">    // double类型转换
NSNumber *n = [NSNumber numberWithDouble:10.3];
int a1 = [n doubleValue];
NSLog(@"%d",a1);


2)将基本数据类型转成字符串

    int a = 20;
NSString *str = [NSString stringWithFormat:@"%d",a];

// 把基本数据类型转成字符串
[str intValue];

// 把字符串转成基本数据类型
//[@"20" intValue];

NSLog(@"%d",[@"20" intValue]);

3)将基本数据类型转换成NSNumber对象(编译器特性)
    // @后面跟上一个数字自动转成number对象 @20
[NSNumber numberWithInt:20];

@10.5; //double型
@YES; //BOOL型
@'A'; //NSNumber对象
@"A"; // NSString对象

int age = 100;
// 将age变量包装成NSNumber对象
@(age);

2.NSValue

NSValue是NSNumber的父类
1)将结构体转为0c对象
<pre name="code" class="objc">    CGPoint p = CGPointMake(10, 10);

// 结构体-->OC对象:将结构体包装成Value对象
NSValue *value = [NSValue valueWithPoint:p];

// 将Value转成对应的结构体
[value pointerValue];

五、NSDate

1.NSDate的创建
<pre name="code" class="objc">        // 创建一个时间对象    NSDate *date = [NSDate date];        // 打印出的是0时区的时间    NSLog(@"%@",date);

    // 使用时间间隔创建
NSDate *date2 = [NSDate dateWithTimeInterval:5 sinceDate:date];

// 从1970年开始走过的秒数
NSTimeInterval seconds = [date2 timeIntervalSince1970];

// 从date2到现在经过的时间
[date2 timeIntervalSinceNow];

2.日期格式化类

<pre name="code" class="objc"><pre name="code" class="objc">    // 日期格式化类
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];

NSLog(@"%@",str);

    // 将字符串转换成date
NSString *time = @"2011/09/10 18:56";

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];

formatter.dateFormat = @"yyyy/mm/dd HH : mm";

NSDate *date = [formatter dateFromString:time];

NSLog(@"%@",date);

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