runtime 實現 NSCopying copyWithZong

 

有時候項目中會有些model須要copy, 這個時候就須要實現 NSCopying 協議方法copyWithZone了3d

可是不少時候都是一個個屬性來賦值, 這樣作屬性少還能夠, 可是若是有不少屬性呢, 難道也要一個一個去賦值嗎? 顯然還須要更好的解決辦法對象

如下是用runtime來實現copyWithZong方法的姿式:blog

 

 

// copy代碼請下拉:get

- (id)copyWithZone:(NSZone *)zone {string

    id objCopy = [[[self class] allocWithZone:zone] init];it

    // 1.獲取屬性列表class

    unsigned int propertyCount = 0;List

    objc_property_t * propertyArray = class_copyPropertyList([self class], &propertyCount);select

    for (int i=0; i<propertyCount; i++) {model

        objc_property_t  property = propertyArray[i];

        // 2.屬性名字

        const char * propertyName = property_getName(property);

        NSString * key = [NSString stringWithUTF8String:propertyName];

        // 3.經過屬性名拿到屬性值

        id value=[self valueForKey:key];

        NSLog(@"name:%s,value:%@",propertyName,value);

        // 4.判斷 值對象是否響應copyWithZone

        if ([value respondsToSelector:@selector(copyWithZone:)]) {

            //5. 設置屬性值

            [objCopy setValue:[value copy] forKey:key];

        }else{

            [objCopy setValue:value forKey:key];

        }

    }

    //*****切記須要手動釋放

    free(propertyArray);

    return objCopy;

}

相關文章
相關標籤/搜索