프로그래머 모집 시리즈: 5 어떻게 자신의 클래스에 코피 수식자를 사용합니까?copy 키워드가 있는setter를 어떻게 다시 씁니까?

대답:
1), 자신의 클래스가 copy 수정자를 사용할 수 있도록 하는 단계:
a)、       NSCopying  
b)、  NSCopying            :
    - (id)copyWithZone:(NSZone *)zone;

코드 예:
- (id)copyWithZone:(NSZone *)zone {
    //           
    Person *p = [[[self class] allocWithZone:zone] init];   
    
    p.name = self.name;
    p.age = self.age;
    
    return p;
}

2)、copy 키워드가 있는 setter를 다시 쓰는 방법:
- (void)setName:(NSString *)name {
    //[_name release];
    _name = [name copy];
}

tips:
Copy & MutableCopy
copy 또는mutableCopy 방법을 사용하여 대상의 복사본을 만들 수 있습니다
  • copy는 NSCoppying 프로토콜을 실현해야 한다. 이런 것들은 변할 수 없는 복사본(예를 들어 NSString, NSArray, NSDictionary)
  • 을 만들어야 한다.
  • mutable Copy는 NSMutable Copying 프로토콜을 먼저 실현해야 하는 가변 복사본(예를 들어 NSMutable String, NSMutable Array, NSMutable Dictionary)
  • copy의 목적은 부본을 만드는 것이고 원시 대상과 복본을 동시에 수정하는 것이 서로 간섭하지 않는다
  • 전편 블로그를 보면 심층 복제 & 얕은 복제에 대해 더 많이 알 수 있다
  • 깊이 복제: 내용 복사, 원본 대상과 복사본은 서로 다른 두 대상의 원본 대상 인용 계수기를 가리키며 복사 계수기는 1
  • 로 설정됨
  • 얕은 복제: 바늘 복사, 원본 대상과 복사본이 가리키는 것은 같은 대상 대상의 인용 계수기 +1, 사실retain 조작
  • 에 해당한다
    결론: 변하지 않는 대상이 변하지 않는 복사본(copy)을 만드는 것만이 얕은 복사이고 나머지는 깊은 복사입니다.

    좋은 웹페이지 즐겨찾기