您的位置:首页 > 移动开发 > Objective-C

黑马程序员—Objective-C学习—Foundation—集合类和其他类

2014-11-04 23:16 162 查看
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

一、集合类

1、NSArray\NSMutableArray

a、有序

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

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

2、NSSet\NSMutableSet

a、无序

3、NSDictionary\NSMutableDictionary

a、无序

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

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

4、NSArray和NSSet对比

a、共同点

(1)、都是集合,都能存放多个OC对象

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

(3)、本身都不可变,都有一个可变的子类

b、不同点

(1)、NSArray是有序的,NSSet是无序的

二、NSArray\NSMutableArray

1、NSArray:不可变数组

a、NSArray的创建

(1) 、  // 这个数组永远是空数组
       
NSArray *array = [NSArray
array];
(2)、   // 一个元素的数组
       
NSArray *array2 = [NSArray
arrayWithObject:@"jack"];
(3)、  
// 多个元素的数组
       
NSArray *array3 = [NSArray
arrayWithObjects:@"jack",@"rose",nil];
(4)、   //快速创建一个NSArray对象

       
NSArray *array4 = @[@"jack",@"jim",
@"rose"];
b、获取数组元素个数,输出用%ld

       //[array2 count]
       
NSLog(@"%ld", array2.count);
c、获取数组元素
(1)、   //获取数组某个位置对应的对象
       
NSLog(@"%@", [array3
objectAtIndex:1]);
(2)、   // 新特性访问方式
       
NSLog(@"%@",array3[0]);
d、数组的遍历
(1)、      
for (int i =
0; i<array4.count; i++) {
           
NSLog(@"%@", array4[i]);
(2)、快速遍历       

 for (id obj
in array
4000
4)
        {  // 找出obj元素再数组中的位置
           
NSUInteger i = [array4 indexOfObject:obj];
           
NSLog(@"%ld-%@",i, obj);
        }

(3)利用block遍历方式
       // [array4 enumerateObjectsUsingBlock:<#^(id obj, NSUInteger idx, BOOL *stop)block#>]
        [array4enumerateObjectsUsingBlock:
        // 每遍历到一个元素,就会调用一次block,并且把当前元素和索引位置当做参数传给block
        // *stop作用是为了退出循环,赋值为YES停止
         ^(id obj,NSUInteger idx,
BOOL *stop) {
           
NSLog(@"%ld-%@",idx, obj);
            
if(idx == 1)
             {  
// 停止遍历
                 *stop =YES;// 只有传地址block内部才可利用指针修改外部的BOOL类型变量
             }
         }];//注意分号别忘了
 //NSEnumerationReverse参数为倒序遍历
    [array enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
        NSLog(@"4倒序遍历array:%ld-->%@",idx,obj);
    }];
     
第四种遍历:利用枚举
    NSEnumerator *en = [array objectEnumerator];
    id obj;
    int j = 0 ;
    while (obj = [en nextObject]) {
        NSLog(@"5遍历array:%d-->%@",j,obj);
        j++;
    }

e、使用注意:
(1)、OC数组—只能存放OC对象

(2)、OC数组不能存放nil值
(3)、OC数组只能存放OC对象、不能存放非OC对象类型,比如int、struct、enum等
2、NSMutableArray:可变数组

a、创建
(1)、NSMutableArray *array = [NSMutableArrayarray];

(2)、NSMutableArray *array2 = [NSMutableArrayarrayWithObjects:@"rose",@"jack",
nil];
(3)、不可以用@[]快速创建NSMutableArray
   // NSMutableArray *array3 = @[@"rose", @"jack"];
b、添加元素
        [array
addObject:[[Person
alloc]init]];
        [array
addObject:@"jim"];
       
// 错误写法
       // [array addObject:nil];
c、删除元素
                    // 删除所有对象
        [array
removeAllObjects];
       // 删除指定对象
        [array
removeObject:@"jim"];
       // 删除对应位置对象
        [arrayremoveObjectAtIndex:1];

三、NSSet\NSMutableSet

1、NSSet

a、创建方法:

(1)、创建一个空的set,不能添加元素

       NSSet *s = [NSSetset];

(2)、NSSet *s1 = [NSSetsetWithObjects:@"jack",@"rose",@"jack1",@"rose1",@"jack2",nil];
b、随机拿一个元素

NSString *str = [s1anyObject];
2、NSMutableSet
a、创建方法
NSMutableSet *s = [NSMutableSetset];
b、添加元素

 [saddObject:@"back"];
c、删除元素

[sremoveObject:@"back"];

四、NSDictionary\NSMutableDictionary

1、NSDictionary

a、key ---> value

     索引 --->文字内容
     里面存储的东西都是键值对
b、创建方式:
(1)、NSDictionary *dict = [NSDictionarydictionaryWithObject:@"jack"forKey:@"name"];
(2)、先定义key数组和对象数组
        NSArray *keys =@[@"name",@"address"];
       NSArray *objects =@[@"jack",@"北京"];

        NSDictionary *dict2 = [NSDictionarydictionaryWithObjects:objects
forKeys:keys];
(3)、NSDictionary *dict3 = [NSDictionary dictionaryWithObjectsAndKeys:
                              @"jack",@"name",
                              @"北京",@"address",
                              @"3243434",@"qq"
                               ,nil];
(4)、编译器特性
NSDictionary *dict4 =@{@"name":@"jack",@"address":@"北京"};//定义用这个
c、获取key对应的value方法
(1)、id obj = [dict objectForKey:@"name"];
(2)、id obj2 = dict2[@"name"];//[]
内放key

d、返回的是键值对的个数

       NSLog(@"%ld",dict2.count);
2、NSMutableDictionary
a、创建方式

NSMutableDictionary *dict =[NSMutableDictionarydictionary];
b、添加键值对

        [dictsetObject:@"jack"forKey:@"name"];
        [dictsetObject:@"北京"forKey:@"address"];

         //将以前的key为@"name"的覆盖
        [dictsetObject:@"rose"forKey:@"name"];
c、移除键值对

[dictremoveObjectForKey:@"address"];
d、数组打印结果用()括住
   字典打印用{}括住,内容为key = value,打印所有键值对
e、不可以用@{}定义一个不可变字典

NSMutableDictionary *dict =@{@"name":@"jack"};
3、字典的遍历
(1)、
        NSArray *keys = [dictallKeys];
       for (int i =0; i<dict.count;
i++) {
           NSString *key = keys[i];
           NSString *object = dict[key];            
           NSLog(@"%@ = %@",key, object);
        }
(2)、[dictenumerateKeysAndObjectsUsingBlock:
         ^(id key,id obj,BOOL *stop) {
            NSLog(@"%@ = %@", key, obj);
         }];
4、字典不允许有相同的key,但允许有相同的value(Object),字典是无序的

五、NSNumber和NSValue

1、NSNumber
a、创建number对象,将基本数据类型转为NSNumber对象
       NSNumber *num = [NSNumbernumberWithInt:10];
b、将NSNumber对象变为基本数据类型
       int a = [num
intValue];
c、字符串和基本数据类型的转换

        int a =20;        
       NSString *str = [NSStringstringWithFormat:@"%d",a];
       int b = [str
intValue];
d、@20 编译器特性,将20包装成一个NSNumber对象
     要区别于NSString对象@“20”
     包装变量int age = 100,@(age)即可
2、NSValue
1、NSNumber之所以能包装基本数据类型为对象,是因为继承了NSValue
2、将结构体包装成OC对象(以CGPoint为例),size,range,rect都可以
    CGPoint p = CGPointMake(10, 10);
NSValue *value = [NSValue valueWithPoint:p];

3、将value转为对应的结构体

CGPoint p2 = [value pointValue];

六、NSDate

1、创建一个时间对象
       NSDate *date = [NSDatedate];// 打印出的是0时区时间
2、离现在时间5秒的时间
        NSDate *date2 = [NSDatedateWithTimeInterval:5sinceDate:date];
3、从1970开始走过的秒数
       NSTimeInterval second = [date2
timeIntervalSince1970];
4、date2与当前时间间隔多少秒
        NSTimeInterval second2 = [date2timeIntervalSinceNow];
5、日期格式化类
NSDateFormatter *formatter = [[NSDateFormatteralloc]init];

6、日期格式: y年  M月  d日  H时  m分  s秒   H (24)时  h (12)时
    formatter.dateFormat =@"yyyy-MM-dd
HH:mm:ss";
7、Date转String
 NSString *str = [formatterstringFromDate:date];
8、String转Date
 NSSDate *date = [formatter dateFromString:time];// 需定义一个time
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  OC学习笔记