美文网首页
copy和mutableCopy

copy和mutableCopy

作者: 偶是星爷 | 来源:发表于2017-09-22 19:13 被阅读20次

    最近面试了一些人,发现大部分人对mutable和inmutable对象并不是分得很清,更不用提它们copy和mutableCopy。下面这个小代码可以帮助大家理解

        NSString *a = @"abc";
        NSLog(@"NSString: %p %p %p", a, [a copy], [a mutableCopy]);
        
        NSMutableString *c = [NSMutableString stringWithString:a];
        NSLog(@"NSMutableString: %p %p %p", c, [c copy], [c mutableCopy]);
        
        NSArray *f = @[a];
        NSLog(@"NSArray: %p[%p] %p[%p] %p[%p]", f, f[0], [f copy], [f copy][0], [f mutableCopy], [f mutableCopy][0]);
        
        NSMutableArray *h = [NSMutableArray arrayWithArray:f];
        NSLog(@"NSMutableArray: %p[%p] %p[%p] %p[%p]", h, h[0], [h mutableCopy], [h mutableCopy][0], [h mutableCopy], [h mutableCopy][0]);
    

    输出结果

    NSString: 0x10004c170 0x10004c170 0x17407ce40
    NSMutableString: 0x17407ce40 0xa000000006362613 0x17407ce80
    NSArray: 0x17401b5d0[0x10004c170] 0x17401b5d0[0x10004c170] 0x174059ce0[0x10004c170]
    NSMutableArray: 0x174059ce0[0x10004c170] 0x17405a280[0x10004c170] 0x174059dd0[0x10004c170]
    

    答案:

    1. 非集合类对象:对 immutable 对象进行 copy 操作,是指针复制,mutableCopy 操作时内容复制;对 mutable 对象进行 copy 和 mutableCopy 都是内容复制。

    2. 集合类对象: copy 和 mutableCopy 的行为表现和非集合对象一样;集合对象里的元素任何情况下都是指针复制。

    相关文章

      网友评论

          本文标题:copy和mutableCopy

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