copy和mutableCopy

最近面试了一些人,发现大部分人对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)