【黑马程序员】---Foundation框架总结02

------- android培训java培训、期待与您交流! ----------

Foundation框架总结---(02)

1.NSArray(不可变数组)

(1)数组的创建
 // 这个array永远是空数组
	NSArray *array = [NSArray array];
    
    NSArray *array2 = [NSArray arrayWithObject:@"jack"];
    
    // nil是数组元素结束的标记
    NSArray *array3 = [NSArray arrayWithObjects:@"jack", @"rose", nil];
    
    //NSArray *array4 = [NSArray arrayWithObjects:@"jack", @"rose", @"4324324", nil];
    
    // 快速创建一个NSArray对象
    NSArray *array4 = @[@"jack", @"rose", @"4324324"];
心得体会:
(1)NSArray是不可变数组,创建数组的时候有几个元素,数组就是几个元素
(2) OC数组只能存放OC对象、不能存放非OC对象类型,比如int、struct、enum等,还有OC数组不能存放nil值。
(3)oil是数组的结束标记
(3)NSArray是有序的。

(2)计算NSArray的元素
NSLog(@"%ld", array3.count);
(3)NSArray中元素的访问
   NSLog(@"%@", [array3 objectAtIndex:1]);
    NSLog(@"%@", array3[0]);
心得体会:
array[3]是OC的编译器特性。

(4)遍历数组
1>.用for循环遍历数组
 Person *p = [[Person alloc] init];
    
    NSArray *array = @[p, @"rose", @"jack"];
    
	for (int i = 0; i<array.count; i++)
	{
      NSLog(@"%@", array[i]);
	}
    
2>.高级for循环遍历数组
   for (id obj in array)		// id obj代表着数组中的每一个元素
      {
         // 找出obj元素在数组中的位置
          NSUInteger i = [array indexOfObject:obj];
    
          NSLog(@"%ld - %@", i, obj);
     }
3>.利用block遍历数组
   [array enumerateObjectsUsingBlock:
     
     // 每遍历到一个元素,就会调用一次block
     // 并且当前元素和索引位置当做参数传给block
     ^(id obj, NSUInteger idx, BOOL *stop)
     {
         NSLog(@"%ld - %@", idx, obj);
         
         
         if (idx == 0)
         {
             // 停止遍历
             *stop = YES;
         }
         
     }];
    
    //    void ^(myblock)(id, NSUInteger, BOOL *) = ^(id obj, NSUInteger idx, BOOL *stop)
    //    {
    //        NSLog(@"%ld - %@", idx, obj);
    //
    //
    //        if (idx == 0)
    //        {
    //            // 停止遍历
    //            *stop = YES;
       }
     };
心得体会:
(1)最好用的是用block遍历数组,既能得到对象又能得到当前对象的位置
(2)此时block作为函数的参数适用。
(3)要注意BOOL *stop,出入传入一个指针,方便通过指针改变实参的值。

2.NSMutableArray (可变数组


(1)可变数组的创建
NSMutableArray *array = [NSMutableArray arrayWithObjects:@"rose", @"jim", nil];
(2)向可变数组添加元素
    [array addObject:[[Person alloc] init]];
    
    [array addObject:@"jack"];
(3)删除可变数组元素
    // 1.删除全部元素
    [array removeAllObjects];
	
    // 2.删除指定的对象
    [array removeObject:@"jack"];
	
	// 3.按数组下标删除对象
    [array removeObjectAtIndex:0];
(4)注意一种常见的错误写法
 // @[] 只创建不可变数组NSArray
    NSMutableArray *array = @[@"jack", @"rose"];
    
    [array addObject:@"jim"];
心得体会:
(1)@[]用于创建一个不可变数组,而不可变数组不可以添加元素。
(2)可变数组NSMutableArray和不可变数组NSArray有很多相似的地方,要学会对比学习。

3.NSSet

(1)NSSet的创建
NSSet *s = [NSSet set];
    
NSSet *s2 = [NSSet setWithObjects:@"jack",@"rose", @"jack2",@"jack3",nil];
(2)NSSet元素的取出:
// 随机拿出一个元素
    NSString *str =  [s2 anyObject];
心得体会:
(1)NSset是随机存放的,所以取元素不能像数组NSArray那样用下标,只能用函数anyObject随机取元素。

4.NSMutableSet


(1)NSMutableSet的创建
NSMutableSet *s = [NSMutableSet set];
(2)NSMutableSet添加元素
[s addObject:@"hack"];
(3)NSMutableSet删除元素
[s removeObject:<#(id)#>];
心得体会:
(1)NSSet和NSArray都是集合,都能存放多个OC对象。
(2)NSArray有顺序,NSSet没有顺序。

5.NSDictionary


(1)NSDictionary的创建
   // 第1种创建方式:
    NSDictionary *dict = [NSDictionary dictionaryWithObject:@"jack" forKey:@"name"];
    
	// 第2种创建方式:
     NSArray *keys = @[@"name", @"address"];
     NSArray *objects = @[@"jack", @"北京"];
     NSDictionary *dict = [NSDictionary dictionaryWithObjects:objects forKeys:keys];
	 
	// 第3种创建方式:
     NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
     @"jack", @"name",
     @"北京", @"address",
     @"32423434", @"qq", nil];
	 
	// 第4种创建方式:
    NSDictionary *dict = @{@"name" : @"jack", @"address" : @"北京"};
(2)NSDictionary元素的取出
    // 第1种取出方式:
    id obj = [dict objectForKey:@"name"];
    // 第2种取出方式:
    id obj = dict[@"name"];
心得体会:
(1)利用@{}创建NSDictionary,是编译器特性,方便,好用
(2)利用dict[@"key"]取出NSDictionary元素也是编译器特性,记住。
(3)其它一些方法多敲敲,要熟练
(4)NSDictionary也是无序的。

6. NSMutableDictionary


(1) NSMutableDictionary的创建
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
(2) NSMutableDictionary添加键值对
    [dict setObject:@"jack" forKey:@"name"];
    [dict setObject:@"北京" forKey:@"address"];
    [dict setObject:@"rose" forKey:@"name"];
(3) NSMutableDictionary移除键值对
    [dict removeObjectForKey:<#(id)#>];
心得体会:
NSMutableDictionary的用法基本上跟其它的集合用法一样,要类比学习。

常见错误代码:
 NSMutableDictionary *dict = @{@"name" : @"jack"};
    [dict setObject:@"rose" forKey:@"name"];
心得体会:
不可变的NSMutableDictionary没有setObject方法,也就是不能添加元素。

(4)NSMutableDictionary的遍历
[dict enumerateKeysAndObjectsUsingBlock:
     ^(id key, id obj, BOOL *stop) {
         NSLog(@"%@ - %@", key, obj);
         
         // *stop = YES;
     }];
     NSArray *keys = [dict allKeys];
   
      for (int i = 0; i<dict.count; i++)
       {
           NSString *key = keys[i];
          NSString *object = dict[key];
   
    
          NSLog(@"%@ = %@", key, object);
      }
(5)数组当中存放一个dictionary
NSArray *persons = @[
    @{@"name" : @"jack", @"qq" : @"432423423", @"books": @[@"5分钟突破iOS编程", @"5分钟突破android编程"]},
    @{@"name" : @"rose", @"qq" : @"767567"},
    @{@"name" : @"jim", @"qq" : @"423423"},
    @{@"name" : @"jake", @"qq" : @"123123213"}
    ];
心得体会:
(1)字典dictionary是无序的
(2)字典dictionary不允许有相同的key,但允许有相同的value(Object)

(6)NSNumber


NSNumber将基本数据类型包装成oc对象

(1)将一个int类型数值包装成NSNumber对象
 NSNumber *num = [NSNumber numberWithInt:10];
(2)将一个NSNumber对象转换为int类型
int a = [num intValue];
(3)将各种基本数据类型包装成NSNumber对象的简单写法:

@10.5;  @YES;  @'A'; // NSNumber对象 @"A"; // NSString对象
(4)一个变量包装成NSNumber对象
    // 将age变量包装成NSNumber对象
    int age = 100;
    @(age);
心得体会:
将一个常量和变量包装成OC对象的简写方式有差异,常量@10.5,变量@(age)。它们都是编译器特性。

(7)NSValue


NSNumber之所以能包装基本数据类型为对象,是因为继承了NSValue
NSValue 能够将结构体包装成OC对象
 CGPoint p = CGPointMake(10, 10);
    // 将结构体转为Value对象
    NSValue *value = [NSValue valueWithPoint:p];
将value转为对应的结构体
	[value pointValue];
心得体会:
如果将一个基本数据类型包装成oc对象就用NSNumber,如果将一个结构体和枚举包装成oc对象就用NSValue。

(8)NSDate


1>创建一个时间对象
    NSDate *date = [NSDate date];
    // 打印出的时候是0时区的时间(北京-东8区)
    NSLog(@"%@", date);
2>.创建 日期格式化类
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
3>代码实例(将一个日期类以指定字符串格式输出)
 NSDate *date = [NSDate 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];
    
    NSLog(@"%@", str);
4>代码实例(将一个字符串,以指定格式生成日期对象)
    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);
心得体会:
(1)[date2 timeIntervalSince1970]获取从1970年开始走过的秒数,我们现在的时间都是通过这个计算出来的。
(2)我们国家处在东9区,相比格林时间快了8小时。
3)日期类其它一些方法,平时要多练习,熟练生巧,不用刻意记,知道有这功能就行。
(4)平时要养成写博客的习惯,多联想,多对比, 多记笔记。












  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值