简书:http://www.jianshu.com/u/5690b3ad0a6f
Blog:http://blog.zhangpeng.site
GitHub:https://github.com/fullstack-zhangpeng
下面代码打印true还是false?
id arr = [[NSArray alloc] init];
if ([[arr class] isKindOfClass:[NSArray class]]) {
NSLog(@"true");
} else {
NSLog(@"false");
}
答案:打印false
1.jpeg代码在请见Demo中的Demo2
分析:类簇的原因
参考文章:
- Sunny大神写的《从NSArray看类簇》
- 《Objective-C类族和工厂模式》
下面代码打印什么内容?
NSMutableSet *mSet = [[NSMutableSet alloc] init];
[mSet addObject:@[@1, @2]];
NSLog(@"1---%@", mSet);
NSMutableArray *mArr = [[NSMutableArray alloc] initWithObjects:@1, nil];
[mSet addObject:mArr];
NSLog(@"2---%@", mSet);
[mArr addObject:@2];
NSLog(@"3---%@", mSet);
[mSet addObject:@[@1, @2]];
NSLog(@"4---%@", mSet);
答案:
2.png分析:
- 集合(NSMutableSet)和数组(NSMutableArray)有相似之处,都是存储不同的对象的地址;不过NSMutableArray是有序的集合,NSMutableSet是无序的集合。
- 集合是一种哈希表,运用散列算法,查找集合中的元素比数组速度更快,但是它没有顺序。当插入相同的数据时,不会有任何效果。
第一次输出时,创建了一个包含@[@1, @2]的NSMutableSet
第二次输出时,向已经创建的mSet中添加一个可变数组
第三次输出时,向前面创建的mArr中添加一个@2,可以成功的将@[@1, @2]这个mArr添加到mSet中,应该是因为 @[@1, @2] 是__NSArrayI
,mArr 是__NSArrayM
,不能成功的判断相等
第四次输出时,由于集合内已经存在相同的@[@1, @2],而mSet中的元素是不能重复的,所以没有成功添加
网友评论