Foundation框架: 8.OC中的集合类之三 - NSSet和NSMutableSet的基本认识

前面我们讲完过了NSArrayNSMutablArray了, 这次我们来讲讲第二个集合类, NSSet和它的子类NSMutableSet, 其实NSSetNSArray基本上是一样的, 唯一的不同点就是NSSet它是没有循序的, 所返回的对象是随机的, 下面让我们来看看吧~





例子:

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[])
{
    NSSet *s = [NSSet set];
    
    NSSet *s1 = [NSSet setWithObjects:@"a", @"b", @"c", @"d", @"e", nil];
    
    NSString *str = [s1 anyObject];
    
    NSLog(@"s = %ld, s1 = %ld", s.count, s1.count);
    
    NSLog(@"str = %@", str);
    
    return 0;
}

打印出来的结果:

2015-02-05 20:39:14.211 7.NSSet[3833:303] s = 0, s1 = 5
2015-02-05 20:39:14.212 7.NSSet[3833:303] str = d





其实NSSetNSArray的创建方法很像, 这是OC语法中的一个规律, 创建什么类的对象, 就以什么类名开头, 下面继续说NSMutableSet:

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[])
{
    NSMutableSet *s = [NSMutableSet set];
    
    // 1.添加元素的方法
    [s addObject:@"a"];
    
    // 2.删除元素的方法
    [s removeObject:@"a"];
    
    return 0;
}

有些人会很细心的发现, 在删除元素的方法里会少了几个和NSArray一样的方法, 就只剩下两个方法, 其实这是没错的, 由于NSSet的特性, 它是随机返回的, 我们并不能知道它会返回哪个对象给我们, 所以这里的删除元素方法就缺少了几个和位置相关的.




总结:

NSSet和NSArray的对比:

1> 共同点

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

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

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


2> 不同点

* NSArray有顺序, NSSet没有顺序.




好了, 这次就讲到这里, 下次我们继续~~

posted @ 2015-02-05 20:35  背着吉他去流浪  阅读(261)  评论(0编辑  收藏  举报