iOS 개발 복제본 NSCoping 및 NSMutable Copying 프로토콜

2052 단어

NSCopiny

NSCopying는 객체 복제본과 관련된 프로토콜입니다.하나의 클래스의 대상이 복사를 지원하려면, 이 클래스가 NSCopying 프로토콜을 준수하고 실현해야 한다.NSCopying 협의 중의 방법은 하나- (id)copyWithZone:(NSZone *)zone뿐이다.우리의 클래스가 NSCopying 협의를 준수하고 클래스의 대상 호출copy 방법을 통과할 때copy 방법은 우리가 실현한 - (id)copyWithZone:(NSZone *)zone 방법을 호출하여 복사 기능을 실현한다.구현 코드는 다음과 같습니다.
- (id)copyWithZone:(NSZone *)zone{    
        Person *model = [[[self class] allocWithZone:zone] init];
        model.firstName = self.firstName;
        model.lastName  = self.lastName;
        // 
        model->_nickName = _nickName;
        return model;
}

설명: - (id)copyWithZone:(NSZone *)zone 방법 중 [self class] 방법으로 되돌아오는 대상을 반드시 allocWithZone: 방법으로 호출해야 한다.지침이 실제적으로 가리키는 것은 Person의 자류일 수 있기 때문이다. 예를 들어 Student,Teacher이다.이런 상황에서 호출[self class]을 통해 정확한 클래스의 유형 대상을 되돌릴 수 있다.

NSMutableCopying

NSCopying 프로토콜과 NSMutableCopying의 차이는 주로 되돌아오는 대상이 가변 유형인지 여부에 있다.Foundation 프레임워크의 NSArray 예
NSArray *nameArray = @[@"Jim", @"Tom", @"David"];
NSArray *copyArray = [nameArray copy];
NSMutableArray *mutableCopyArray = [nameArray mutableCopy];
[mutableCopyArray addObject:@"Sam"];


``NSArray copycopy -(id)copyWithZone: (NSZone*)zone, , 。 NSArray mutableCopymutableCopy -(id)mutableCopyWithZone: (NSZone*)zone`로 가변 대상을 얻었다.
따라서 사용자 정의 클래스가 변할 수 있는 것과 변할 수 없는 차이가 있다면 복사를 지원하려면 NSCopyingNSMutableCopying를 동시에 실현해야 한다. - (id)copyWithZone:(NSZone *)zone에서는 변할 수 없는 대상을 되돌려주고- (id)mutableCopyWithZone:(NSZone *)zone에서는 변할 수 없는 대상을 되돌려준다.
여러분의 적극적인 평론을 환영합니다. 우리 함께 기술을 토론합시다!!문장이 괜찮다고 생각되면 문장 아래의 를 클릭해 주세요!!당신의 지지는 저에게 가장 좋은 격려가 될 것입니다. 감사합니다!!!

좋은 웹페이지 즐겨찾기