美文网首页iOS开发笔记本
【iOS】面试小结_20171030

【iOS】面试小结_20171030

作者: zhangPeng丶 | 来源:发表于2017-11-09 00:01 被阅读28次

    简书http://www.jianshu.com/u/5690b3ad0a6f
    Bloghttp://blog.zhangpeng.site
    GitHubhttps://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
    分析:类簇的原因
    参考文章:
    1. Sunny大神写的《从NSArray看类簇》
    2. 《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中的元素是不能重复的,所以没有成功添加

    代码在请见Demo中的Demo3

    相关文章

      网友评论

        本文标题:【iOS】面试小结_20171030

        本文链接:https://www.haomeiwen.com/subject/lhbumxtx.html