IOS-Foundation-Copy

1546 단어
1. 기본 개념: 딥 카피 & 얕은 카피
딥 카피: (카피 내용 - 새 객체)
얕은 복사: (복사 포인터 - 같은 대상)
  • Mutable String의 copy, Mutable String의 mutable Copy,string의 mutable Copy는 모두 깊이 복사
  • string의copy는 잠재 복사
  • 검증 방법, 메모리 주소 관찰
    Book *book = [[Book alloc] init];
    Book *newBook = [book mutableCopy];
    NSLog(@"book address:%p, new book address:p%",book ,newBook);

    2. copy 키워드는 문자열에 적용됨
    Example:
    Person *p = [[Person alloc] init];
    NSMutableString *name = [NSMutableString stringWithFormat:@"Test"];
    //  MutableString, 
    p.name = name;
    //  name , p.name 
    [name appendString:@"123"];
    NSLog(@"name:%@",name);  // Test123
    NSLog(@"p.name:%@",p.name);  // Test

    위의 코드에서도 다음 문제를 설명합니다.
    무엇 때문에
    NSString
    정의된 속성은
    copy
    수식하다
    가령 위의 Person 대상의name 속성을retain으로 수식하면name 변수의 값을 바꾸면name 속성도 따라서 바뀌고Test123을 출력한다(변수의 값을 바꾸어 대상의 속성 값에 영향을 주었고 불합리하다). NSString의retain은 깊은 복사에 해당한다.copy는 잠재적인 복사이다!
    3. copy 키워드는 객체에 적용됨
    Example:
    Book *book = [[Book alloc] init];
    Book *newBook = [book mutableCopy];
    NSLog(@"book address:%p, new book address:%p",book ,newBook);
            
    book.name = @"jason";
    book.age = 10;
    book.no = 123;
    Book *new2Book = [book copy];
    NSLog(@"name:%@,age:%d,no:%d",new2Book.name,new2Book.age,new2Book.no);

    설명이 필요한 두 가지 사항:
    [book copy];방법
    - (id)copyWithZone:(NSZone *)zone
    - (id) copyWithZone: (NSZone*) zone은 NSCopying 프로토콜을 준수합니다.

    좋은 웹페이지 즐겨찾기