黑马程序员 —OC(Foundation补充)

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

一、NSMutableArray

       NSMutableArray是可变数组,它继承自NSArray

      NSMutableArray常用的操作有:

   创建可变数组时:要以nil结束

<span style="font-size:18px;">NSMutableArray  *array = [NSMutableArray   arrayWithObjects:@"rose",@"jim",nil] ; 以nil结束</span>
    向数组中添加元素:

<span style="font-size:18px;">NSMutableArray  *array = [NSMutableArray  array] ;
[array  addObject:[[person  alloc]  init]] ;
[array  addObject:@"jack"] ;</span>
注意:不能添加nil值得元素,因为nil是数组结束的标识。


错误的写法:

<span style="font-size:18px;">[array  addObject:nil] ;  //  这是错误的写法</span>

删除所有元素:
<span style="font-size:18px;">[array   removeAllObjects];  //删除所有的元素</span>

删除最后一个元素:

<span style="font-size:18px;">[array  removelastObject] ;</span>


删除指定的元素:

<span style="font-size:18px;">[array  removeObject:@"jack"];</span>


按照索引删除元素:

<span style="font-size:18px;">[array  removeObjectAtIndex:0] ;</span>


注意:@[ ]只可创建不可变数组

如下:

  

<span style="font-size:18px;">NSMutableArray  *array = @[@"jack", @"rose"] ; 错误写法
</span>
右边产生了一个NSArray对象,因此会产生类型不匹配的警告。

二、 NSSet 和NSMutableSet

1.NSSet

    NSSet 也是一种集合类,

    它与NSArray最大的区别是:

    NSArray中的元素是有序的,因此NSArray中有索引的概念

    NSSet 中的元素是没有顺序的。

   创建一个NSSet:

<span style="font-size:18px;">NSSet  *s = [NSSet set] ;   //  永远为空的NSSet

NSSet  *s2 = [NSSet  setWitchObjects:@"jack",@"rose",@"jack2",@"jack3", nil] ;</span>


随机取出一个元素

<span style="font-size:18px;">NSString  *str = [s2  anyObject];

NSLog(@"%@", str) ;</span>

2.NSMutableSet

 创建NSMutableSet对象

<span style="font-size:18px;">NSMutableSet  *s = [NSmutableSet  set] ;</span>

 添加元素:

<span style="font-size:18px;">[s  addObject: @"hllo"];
</span>

删除元素:

<span style="font-size:18px;">[s  removeObject:(id)] ;   //  删除特定元素
[s  removeAllObject];      //   删除所有元素</span>


NSSet 和NSArray 的对比

 1> 共同点

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

 * 只能存放OC对象,不能存放非OC对象类型(基本数据类型:intcharfloat等,结构体,枚举)

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

 2> 不同点

 * NSArray有顺序,NSSet没有顺序

 

三、NSDictionary和NSMutableDictionary

     1. NSDictionary常被称为字典,存的都是键值对(不可变)。

      创建一个NSDictionary对象
      键值对key:@"name":@"jack"
   方法1:
<span style="font-size:18px;">方法 :dictionaryWithObject: forKey:
NSDictionary  *dict  = [NSDictionary  dictionaryWithObject:@"jack" forKey:@"name"] ;</span>
   方法2:
            有多个键值对时,可以用两个数组分别存放Keys和values,
            利用方法:dictionaryWithObjects: forKeys:
<span style="font-size:18px;">NSArray  *keys = @[@"name", @"address"] ;
NSArray  *objs = @[@"jack",@"北京"] ;
NSDictionary  *dict = [NSDictionary  dictionaryWithObjects:objs forKey:keys] ;</span>

    方法3:
        
<span style="font-size:18px;">NSDictionary  *dict = [NSDictionary  dictionaryWithObjectsAndKeys:@"jack",@"name",@"北京",@"address",@"123456",@"QQ", nil nil nil];   //注意要加 nil 来结束</span>

      利用Xcode编译器特性,快速创建:@{}
如下:
<span style="font-size:18px;">NSDictionary   *dict = @{@"name":@"jack",@"address":@"北京"} ;</span>

     取出一个元素
<span style="font-size:18px;"> id  obj = [dict objectForKey:"name"];//  取出name对应的值
 NSLog (@"%@", obj) ;  //  jack</span>

     利用编译器特性,取出元素:对象名[key]
<span style="font-size:18px;">obj  =  dict[@"name"] ;
NSLog(@"%@",obj);  //  jack</span>

返回键值对的个数对象名.count
<span style="font-size:18px;">NSLog (@"%ld",dict.count);</span>
注意:
   字典不允许有相同的key,可以有相同的value(Object)

2. NSMutableDictionary(可变)
     创建一个NSMutableDictionary:
NSMutableDictionary   *dict = [NSMutableDictionary  dictionary];
     添加键值对:setObject方法
[dict  setObject:@"jack" forKey:@"name"] ;
[dict  setObject:@"北京"  forKey:@"address"] ;
注意:
           给存在的Key赋值,就值被覆盖
例如:
[dict setObject:@"rose" forKey:@"name"];   //   给相同Key赋值时,旧值会覆盖,此时的 name 为 rose

      移除键值对:
[dict removeObjectForKeys:@"name"] ;

     数组和字典的打印:
NSLog(@"%@",@[@"jack",@"rose"]);  //  数组
NSLog (@"%@",dict) ;  //  字典

     @{}创建不可变的字典时注意以下错误写法:
//   错误的写法
NSMutableDictionary  *dict = @{@"name":@"jack"}

3.字典的遍历
     
NSDictionary  *dict = @{@"name":@"jack",@"address":@"北京",@"qq":@"12345678"};
 利用block方法:
     
int  i = 0 ;
[dict enumerateKeysAndObjectsUsingBlock:
^(id key, id obj , BOOLBOOL  *stop)
{
         NSLog(@"%@=%@", key , obj);
          /*可以停止打印
           if(i==1)
           {
                 *stop = YES;
            }
           */
} ] ;

字典的数组:
<span style="font-size:14px;">NSArray  *persons = @[
@{@"name":@"jack",@"qq":@"23456789"},
@{@"name":@"rose",@"qq":@"22334455"},
@{@"name":@"jam",@"qq":@"54321"}];</span>

取出其中的某个字典:
NSDictionary  *jam = person[2];
NSLog(@"%@",jam);

先取出1位置对应的字典,再取出字典中qq这个key对应的数据
NSLog(@"%@",persons[1][@"qq"]);
四、 NSNumber和NSValue

使用NSNumberNSValue来包装基本数据类型,让它们转换为对象类型的数据
1. NSNumber
     将BOOL、char 、int、float、double、NSInteger类型的数据包装成NSNumber类型的对象
     如下:
NSNumber  *c = [NSNumber  numberWithChar:'A'] ;
NSNumber  *i = [NSNumber  numberWithInt:10] ;

将对象转为基本类型,如下:
[c  charValue];
[i   intValue];

将基本类型转成字符串
NSString   *str = [NSString  stringWithFormat:@"%d",a] ;

将字符串转为基本类型
[str  intValue];

利用编译器特性:
NSNumber  *c = @'A' ;  //  将A包装成对象
NSNumber  *i = @10;  //   将10包装成对象
还可以这样包装数据:
例如:将age变量包装成NSNumber
int  age  = 10 ;
NSNumber  *a = @(age);
        对NSNumber类型的分析:
     NSNumber之所以能包装数据,是因为继承了NSValue,
     NSNumber只能包装数字类型,若要包装结构体就得使用NSValue。
     使用NSValue将结构体包装成NSValue类型的OC 对象:
 将结构体包装成OC对象:
CGPoint  p = CGPointMake(10,10);

将结构体转为NSValue:
NSValue   *value = [NSValue  valueWithPoint:p] ;

将value转为对应的结构体:
[value  pointvalue];


五、NSDate类
      创建一个时间对象:  
 例如:当前的时间
NSDate  *date = [NSDate  date] ;  //  默认为当前的时间

打印时间:
NSLog(@"%@",date) ;//    打印的为0时区的时间

创建一个时间对象:比date晚五秒种
NSDate  *date2 =  [NSDate  dateWithTimeInterval:5 sinceDate:date] ;  

获取从2000年1月一日凌晨走过的秒数:
NSTimeInterval  seconds = [date2  timeIntervalSince2000] ;  //  为double类型 

获取date与当前时间的间隔:单位:秒
[date2   timeIntervalSinceNow] ;

日期格式化的使用:
1.将date对象转化为字符串:
void   dateToString()
{
        NSDate  *date = [NSDate  date];

        //  日期格式化类
        NSDateFormat   *formatter = [[NSDateFormatter  alloc]   init] ;
        //  H (24小时制)   h  (12小时制)
       //  y 年  M月  d 日
formatter.dateFormat = @"yyyy - MM-dd   HH:mm:ss" ;
NSString  *strDate =[formatter  stringFromDate:date] ;
NSLog(@"%@", strDate) ;
       
}

2. 将字符串转为日期:

void  stringToDate()
{
       NSString   *time = @"2015/01/12  03:30" ;

NSDateFromatter  *formatter = [[NSDateFormatter  alloc]   init];
formatter.dateFormat = @"yyy/MM/dd  HH:mm";
NSDate  *date = {formatter  dateFormString:time} ;
NSLog(@"%@",date);
}










  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值