iOS에서 Copy와 Mutable Copy의 간단한 이해

2571 단어
iOS 일반 유형(NSString, NSArray 및 NSDictionary)에 대한 copy 방법 이해

개념 소개

  • 얕은 복사: 메모리 주소의 바늘만 복사하고 새로운 메모리를 열지 않습니다.
  • 딥 클로닝: 새 메모리를 열고 새 메모리 주소를 가리키는 바늘을 만듭니다.
  • false 심도 복제: 가변 대상을copy할 때 생성된 가변 대상이 새로운 메모리를 열었지만 대상 자체의 성질이 바뀌었다.

  • 단순 기억

  • 불변 객체 + copy = 얕은 복제
  • 불변 객체 + mutable Copy = 딥 클로닝
  • 가변 개체 + copy = false 딥 클로닝
  • 소프트 객체 + mutable Copy = 딥 클로닝
  • 다음은 단독 소개 부분입니다.

    NSString 및 NSMutableString

  • 코드
  • // __NSCFConstantString : 0x1037faa48
    NSString *s1 = @"321321321"; 
    
    // __NSCFConstantString : 0x1037faa48, , 
    NSString *cs1 = [s1 copy]; 
     
    // __NSCFString : 0x604000449780, , ,  ->  
    NSMutableString *ms1 = [s1 mutableCopy]; 
    
    // __NSCFString : 0x604000449780,  NSString   mutableCopy  
    [ms1 appendString:@"0000"]; 
    
    // __NSCFString : 0x60000005e330
    NSMutableString *ms = [NSMutableString stringWithString:@"fdasfda"]; 
    
    // NSTaggedPointerString : 0xa616466736164667,false , ,  ->  ,  
    NSString *cms = [ms copy]; 
    
    // __NSCFString : 0x600000443000, , 
    NSMutableString *mms = [ms mutableCopy]; 
    

    NSArray 및 NSMutableArray

  • 코드
  • // __NSArrayI 0x604000221700
    NSArray *a = @[@1, @2]; 
    
    // __NSArrayI 0x604000221700, ,  
    NSArray *ca = [a copy]; 
    
    // __NSArrayM 0x60400024e010, , ,  ->   
    NSMutableArray *ma = [a mutableCopy]; 
    
    // __NSArrayM 0x60400024e010,  NSArray   mutableCopy  
    [ma addObject:@3]; 
    
    // __NSArrayM 0x600000246e40
    NSMutableArray *m = [NSMutableArray arrayWithObjects:@"a", @"b", nil]; 
    
    // __NSArrayI 0x600000039040,false ,  ->  ,  
    NSArray *cm = [m copy]; 
    
    // __NSArrayM 0x600000246ea0, ,  
    NSMutableArray *mm = [m mutableCopy]; 
    

    NSDictionary 및 NSMutable Dictionary

  • 코드
  • // __NSDictionaryI : 0x60400027f8c0
    NSDictionary *d = @{@"aa": @(11), @"bb": @(22)}; 
    
    // __NSDictionaryI : 0x60400027f8c0, , 
    NSDictionary *cd = [d copy]; 
    
    // __NSDictionaryM : 0x604000039260, , ,  ->  
    NSMutableDictionary *md = [d mutableCopy]; 
    
    // __NSDictionaryM : 0x604000039260,  NSDictionary   mutableCopy  
    [md setObject:@(33) forKey:@"cc"]; 
    
    // __NSDictionaryM : 0x604000039460
    NSMutableDictionary *m = [NSMutableDictionary dictionaryWithDictionary:@{@"gg": @(88), @"hh": @(99)}]; 
    
    // __NSFrozenDictionaryM : 0x6040000394e0,false , ,  ->  , 
    NSDictionary *cm = [m copy]; 
    
    // __NSDictionaryM : 0x6040000394a0, , 
    NSMutableDictionary *mm = [m mutableCopy]; 
    

    좋은 웹페이지 즐겨찾기