码迷,mamicode.com
首页 > 其他好文 > 详细

黑马程序员--oc基础第十篇(foundation框架下、集合)

时间:2015-03-02 20:57:45      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:

十 . oc基础(Foundation框架下)

1.下面介绍几种OC对象类型的存储结构:NSArray,NSDictionary,NSSet,以及基本数据类型封装类。

 

NSNumber:*既然这几种数据结构都是用来存放对象类型的那么基本数据类型想要放入其中就要先对他们进行封装。使用NSNumber对基本数据类型进行封装。

 

//
//  Created by keeganlee on 15/3/2.
//  Copyright (c) 2015年 keeganlee. All rights reserved.
//

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSNumber *number1=[NSNumber numberWithInt:10];
        NSNumber *number1=[NSNumber numberWithFloat:12.5];
        NSNumber *number1=[NSNumber numberWithChar:k];
        NSNumber *number1=[NSNumber numberWithBool:true];
    }
    return 0;
}

 

上面的几行代码,分别对int,float,char,bool类型的数据进行了封装。使他们成为对象。这样就可以像对象一样存入到数组,集合,字典中去了。

2.集合NSarray

*NSArray:是一种不可变数组,一单创建就无法在改变。

 

*创建方式:通过构造方法创建,

 

 

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSArray *array=[NSArray alloc] initWithObjects:<#(id), ...#>, nil
    }
    return 0;
}

 

 

可以一次性向其中加入多个元素,但是一旦创建其中的内容就不能再改变。(注意:集合中的最后一个元素一定要是nil)。

 

数组中存放的是各个对象的的地址而不是数据。因为存储的对象可以是各种类型,所以要打印数组中的对象时最好重新写个各类的description方法。

 

注意不要将nil作为元素存储到数组中,不然会导致数组丢失。

 

*创建数组的快捷方式:NSArray *array=@[@"a","b"];

 

*获取元素的快捷方式:NSString *str=array[0]

获取元素的另一种方式:[array objectAtIndex:10];

 

*怎强的for循环  for(NSObject *objc in array)

每次从array的数组中取出一个元素,将这个元素赋值给NSobject元素。对元素进行操作。

 

*枚举器 NSEnumerator :(相当于java语言中的iterator一样)

 

//

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    NSArray *arr=@[@"good",@"good",@"study"];
    NSEnumerator *enumer=[arr objectEnumerator];
    NSString *value;
    while (value=[enumer nextObject]) {
        NSLog(@"%@",value);
    }
    
}

 

 

 

 

*数组的排序:不用再像c语言一样自己写排序算法了,直接用内部的函数就可以了,老师课上一共讲了4种排序方法其实只有三种

 

第一种:使用SortArrayUsingSelector

    

int main(int argc, const char * argv[]) {
   
    NSArray *array=@[@"b",@"c",@"d"];
    [array sortedArrayUsingSelector:@selector(compare:)];
    
}

 

 

值得注意的是这里的compare:是针对于NSString类型的,所以其他类型不能用这种排序方法。

 

第二种:使用block方式进行排序

  

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
   
    NSArray *array=@[@"b",@"c",@"d"];
    [array sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
        NSComparisonResult result=[obj1 compare:obj2];
        return result;
    }];
    
}

 

同样是使用了NSString类型的compare方法。

 

第三种:自定义对象进行排序

 

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    
    NSArray *array=@[Person1,Person2,Person3];
    NSSortDescriptor *d1=[NSSortDescriptor sortDescriptorWithKey:@"age" ascending:YES];
    NSArray *compare=@[d1];
    [array sortedArrayUsingDescriptors:compare];
    
}

 

 

这种方式就比较灵活了,可以根据不同的对象呢所共有的关键字进行排序,而且可以对对关键字进行升序,降序操作。功能比较强大。

 

 

第四种:其实是上面几种的变种

 

 

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    
    NSArray *array=@[Person1,Person2,Person3];
    array=[array sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
        Person *p1=obj1;
        Person *p2=obj2;
        
        return [p1.year compare: p2.year];
    }
}

 

 

其中其实也是用了NSSting类型的compare方法。

 

数组的遍历:普通for循环,增强for循环 枚举器遍历

 

*第一种:普通for循环遍历

 

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    
    NSArray *array=@[Person1,Person2,Person3];
    for (int i=0; i<=array.count; i++) {
        NSLog(@"%@",array[i]);
    }
    
}

 

*第二种:增强的for循环

 

int main(int argc, const char * argv[]) {
    
    NSArray *array=@[Person1,Person2,Person3];
    for (Person *per in array) {
        NSLog(@"%@");
    }
    
}

 

*第三种:枚举器遍历

 

int main(int argc, const char * argv[]) {
    
    NSArray *array=@[Person1,Person2,Person3];
    NSEnumerator *enmer=[array objectEnumerator];
    Person *per;
    while (per=[enmer nextObject]) {
        NSLog(@"%@",per);
    }
    
}

 

*字典

NSDictionary:字典就是关键字及其定义(描述)的集合。Cocoa中的实现字典的集合NSDictionary在给定的关键字(通常是一个NSString)下存储一个数值(可以是任何类型的对象)。然后你就可以用这个关键字来查找相应的数值。


不同于数组,字典(也被称为散列表或关联数组)使用的是键查询的优化存储方式。它可以立即找出要查询的数据,而不需要遍历整个数组进行查找。


可使用dictionaryWithObjectsAndKeys来创建字典


查询字典的值:objectForKey


NSMutableDictionary的dictionary方法可以创建一个可变字典,也可以使用dictionaryWithCapaticy:。


使用 setObject:forkey: 方法添加字典元素,如果关键字已存在,则用新植替换旧值。


类似的,NSMutableDictionary类允许随意添加或删除字典元素。

 

添加元素:setObject:forkey:

 

删除元素:removeObjectForKey:

    myClassDict = [NSDictionary dictionaryWithObjectsAndKeys:                
my1, @"my1",
my2, @"my2", my3, @"my3", my4, @"my4", nil];

 

*set:set中存放的元素不能相同,他会先比较这两个元素的地址,如果相同则加入元素失败,如果不用在比较元素的内容。在java中不同的类要定义不同的equal方法。来确保存入的值是不同的。

 

黑马程序员--oc基础第十篇(foundation框架下、集合)

标签:

原文地址:http://www.cnblogs.com/keeganlee/p/4309639.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!