黑马程序员-OC笔记(七)集合类 NSNumber、NSValue NSDate

来源:互联网 发布:巨人网络小怪兽工作室 编辑:程序博客网 时间:2024/06/05 01:04

 

一、 集合类

1> NSArray\NSMutableArray

 *有序

 *快速创建(不可变):@[obj1,obj2]

 *快速访问元素:数组名[i]

2> NSSet\NSMutableSet

 *无序

3>NSDictionary\NSMutableDictionary

 *无序

 *快速创建(不可变):@{key1 : value1, key2 : value2}

 *快速访问元素:字典名[key]

4> NSArray 和NSSet对比

 a> 共同点

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

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

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

 b>不同点

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

a、  NSArray

NSArray : 不可变数组

NSMutableArray : 可变数组

 

NSArray

 

 

Person.h

#import <Foundation/Foundation.h>

@interface Person : NSObject

@end

main.m

#import <Foundation/Foundation.h>

#import "Person.h"

int main(int argc,constchar * argv[])

{

   /*

    // @[] 只创建不可变数组NSArray

    // 错误写法

     NSMutableArray *array =@[@"jack",@"rose"];

    [array addObject:@"jim"];

    */

   

   return 0;

}

 

 

void NSArrayUse()

{

   /*

     Person *p = [[Person alloc] init];

     Person *persons[5] = {p, [[Person alloc]init]};

     */

   

   // OC数组不能存放nil

   // OC数组只能存放OC对象,不能存放非OC对象类型,比如intstructenum

   

   // 这个array永远是空数组

   //NSArray *array = [NSArray array];

   

   /*

     1NSArray的创建

     */

   NSArray *array2 = [NSArrayarrayWithObject:@"jack"];

   

   //nil是数组元素结束的标记

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

   

   // NSArray *array4 = [NSArrayarrayWithObjects:@"jack",@"rose",@"he", nil]; ==

   

   // 快速创建一个NSArray对象

   NSArray *array4 = @[@"jack",@"rose",@"he"];

   

   /*

     2NSArray的元素个数

     */

   

   // [array2 count]; == array2.count;

   NSLog(@"%ld",array2.count);

   

   /*

     3NSArray中元素的访问

     */

   

   NSLog(@"%@",[array3objectAtIndex:0]);// == array3[0]

   

   // 编译器特性

   NSLog(@"%@",array4[1]);//使用这种方式

}

 

 

 

 

// 遍历数组

void Use()

{

   Person *p = [[Personalloc]init];

   NSArray *array = @[p,@"jack",@"sfxc"];

   //    for (inti=0; i<array.count; i++) {

   //        NSLog(@"%@",array[i]);

   //    }

   

   // idobj代表着数组中的每一个元素

   for (idobjin array)

   {

       // 找出obj元素在数组中的位置

       NSUIntegeri = [array indexOfObject:obj];

       NSLog(@"%ld--%@",i,obj);

       if (i == 1)

       {

            break;

       }

   }

   

   // 每遍历到一个元素,就会调用一次block

   // 并且当前元素和索引位置当做参数传给block

   [array enumerateObjectsUsingBlock:^(idobj,NSUIntegeridx,BOOL *stop) {

       

       NSLog(@"%ld--%@",idx, obj);

       

       if (idx == 1) {

            // 停止遍历

            *stop = YES;

       }

   }];

   

   /*

     enumerateObjectsUsingBlock的本质:

     void (^myBlock)(id, NSUInteger, BOOL *) =^(id obj, NSUInteger idx, BOOL *stop) {

    

     NSLog(@"%ld--%@", idx, obj);

    

     if (idx == 1) {

     // 停止遍历

     *stop = YES;

     }

     };

    

     for (int i=0; i<array.count; i++) {

     // 用来标记是否需要停止遍历

     BOOL isStop = NO;

    

     // 取出元素

     id obj = array[i];

    

     myBlock(obj, i, &isStop);

    

     if (isStop) {

     break;

     }

     }

     */

   

}

 

// 可变数组的基本使用

void user1()

{

   //NSMutableArray *array =[NSMutableArray array];

   NSMutableArray *array =[NSMutableArrayarrayWithObjects:@"rose",@"jim",nil];

   

   // 添加元素

   [array addObject:[[Personalloc]init]];

   [array addObject:@"jack"];

   

   // 删除所有元素元素

   // [array removeAllObjects];

   // 删除指定对象

   [array removeObject:@"jack"];

   

   [array removeObjectAtIndex:1];

   

   NSLog(@"%@",array);

   

   NSLog(@"%ld",array.count);

   // 错误写法

   // [array addObject:nil];

 

}

 

   NSSet

#import <Foundation/Foundation.h>

 

int main(int argc,constchar * argv[])

{

   NSMutableSet *s = [NSMutableSetset];

   

   // 添加元素

   [s addObject:@"back"];

   // 删除元素

   [s removeObject:@"back"];

   

   return 0;

}

 

// set的基本使用

void test()

{

   // 创建一个空的set

   //NSSet *s = [NSSet set];

   

   NSSet *s1 = [NSSetsetWithObjects:@"jack",@"rose",@"jack1",@"rose1",@"jack2",nil];

   

   // 随机拿出一个元素

   NSString *str = [s1 anyObject];

   

   NSLog(@"%ld",s1.count);

   NSLog(@"%@",str);

}

 

   NSDictionary

#import <Foundation/Foundation.h>

int main(int argc,constchar * argv[])

{

   // 字典不允许有相同的key,但允许有相同的value(Object)

   // 字典是无序的

   

   NSDictionary*dict2 = @{

                            @"name": @"jack",

                            @"address":@"北京",

                            @"qq":@"78834253",

                            @"name1": @"jack",

                            @"name2": @"jack"

                            };

   

   NSArray *keys = [dict2 allKeys];

   //NSLog(@"%@",keys);

   

   for (inti =0;i<dict2.count; i++) {

       NSString *key = keys[i];

       NSString *object =dict2[key];

       

       NSLog(@"%@ = %@",key, object);

   }

   

   [dict2 enumerateKeysAndObjectsUsingBlock:

    ^(id key, idobj,BOOL *stop) {

       NSLog(@"%@ = %@",key, obj);

        

      //  *stop = YES;

   }];

   

   return 0;

}

 

void test()

{

   /*

     字典:

     key ---> value

     索引 --->文字内容

    

     里面存储的东西都是键值对

    

     */

   // NSDictionary *dict = [NSDictionarydictionaryWithObject:@"jack" forKey:@"name"];

   

   NSArray *keys = @[@"name",@"address"];

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

   

   NSDictionary *dict = [NSDictionarydictionaryWithObjects:objectsforKeys:keys];

   

   NSDictionary*dict1 = [NSDictionarydictionaryWithObjectsAndKeys:

                           @"jack", @"name",

                           @"北京",@"address",

                           @"3243434", @"qq"

                           , nil];

   

   NSDictionary*dict2 = @{@"name": @"jack",@"address":@"北京"};//定义用这个

   

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

   id obj1 = [dict1 objectForKey:@"qq"];

   id obj2 = dict2[@"name"];

   

   NSLog(@"%@",obj);

   NSLog(@"%@",obj1);

   NSLog(@"%@",obj2);

   

   // 返回的是键值对的个数

   NSLog(@"%ld",dict2.count);

   

   /*

     // 错误代码

     NSMutableDictionary *dict =@{@"name":@"jack"};

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

     */

}

 

void test2()

{

   NSMutableDictionary *dict =[NSMutableDictionarydictionary];

   

   // 添加键值对

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

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

   

   // 将以前的key@"name"的覆盖

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

   

   // 移除键值对

   // [dict removeObjectForKey:@"address"];

   

   id obj = dict[@"name"];

   

   NSLog(@"%@",obj);

   

   NSLog(@"%@",dict);

}

void test3()

{

   NSArray *person = @[

                        @{@"name":@"jack",@"qq":@"78834253",@"books":@[@"5分钟突破IOS编程",@"5分钟突破android编程"]},

                        @{@"name":@"rose",@"qq":@"534234"},

                        @{@"name":@"jim",@"qq":@"3425234"},

                        @{@"name":@"jake",@"qq":@"4634352455"}

                        ];

   NSDictionary*jim = person[2];

   NSLog(@"%@",jim);

   // 先取出1位置对应的字典

   // 再取出字典中qq这个key对应的数据

   NSLog(@"%@",person[1][@"qq"]);

   NSLog(@"%@",person[0][@"books"][0]);

   

   NSArray *array = person[0][@"books"];

   NSLog(@"%@",array);

   

}

 

 

 

 

二、 NSNumber和NSValue

 

 

 

 

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

#import <Foundation/Foundation.h> int main(int argc,constchar * argv[]){   // 将结构体包装成 OC对象   CGPoint p = CGPointMake(10, 10);   // 将结构体转为Value对象   NSValue *value = [NSValuevalueWithPoint:p];      NSArray *array = @[value];      // 将value转为对应的结构体   CGPoint pp = [value pointValue];    return 0;} voidNSNumberTest(){   NSNumber*num =[NSNumbernumberWithInt:10];      NSDictionary*person = @{                             @"name" : @"jack",                             @"age" : num                             };   NSNumber*num2 = person[@"age"];   int age =[num2 intValue];      NSLog(@"%d",age);} voidNSNumberTest2(){   NSNumber*num = [NSNumbernumberWithDouble:10.5];      double d = [num doubleValue];         int a = 20;      NSString *str = [NSStringstringWithFormat:@"%d",a];   int b = [str intValue];      NSLog(@"%.1f--%d",d, b);         //@20 将20包装成一个NSNumber对象   // 将各种数据类型包装成NSNumber对象   //@10.5   // @'A' NSNumber对象  @"A" NSString对象   //@YES   NSArray *array = @[                       @{@"name" :@"jack", @"age": [NSNumbernumberWithInt:20]},                       @{@"name" :@"rose", @"age":@20},                       @{@"name" :@"jim", @"age":@25},                       @{@"name" :@"jake", @"age":@18},                       ];      // 将age变量包装成NSNumber对象   int age = 100;   @(age);// @age;是错误的} 


 

 

三、NSDate

 

 

#import <Foundation/Foundation.h> int main(int argc,constchar * argv[]){   NSString *time = @"2011/09/1018:56";      NSDateFormatter *formatter =[[NSDateFormatteralloc] init];   formatter.dateFormat = @"yyyy/MM/dd HH:mm";      NSDate *date =[formatter dateFromString:time];      NSLog(@"%@",date);      return 0;}void test(){   // 创建一个时间对象   NSDate *date = [NSDatedate];      // 打印出的是0时区的时间 (北京-东8区)   NSLog(@"%@",date);      NSDate *date2 = [NSDatedateWithTimeInterval:60*60*8sinceDate:date];   NSLog(@"%@",date2);      // 从1970开始走过的秒数   NSTimeInterval second =[date2 timeIntervalSince1970];   NSLog(@"%.2f",second);      NSTimeInterval second2 = [date2timeIntervalSinceNow];   NSLog(@"%.2f",second2);} void date2string(){   NSDate *date = [NSDatedate];      // 日期格式化类   NSDateFormatter *formatter = [[NSDateFormatteralloc] init];      // y 年 M月 d 日 H 时 m分 s 秒  H (24)时 h (12)时   formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";      NSString *str = [formatter stringFromDate:date];      NSLog(@"%@",str);} 

 

 



0 0
原创粉丝点击