Awesome Open Source
Awesome Open Source


Language License MITΒ  CocoaPodsΒ 

πŸ“– English Documentation | πŸ“– δΈ­ζ–‡ζ–‡ζ‘£


CSModel is a concise and efficient model framework for iOS/OSX, and provides nested Model to compare values and copy values.


  • Lightweight: Easily and simpily to use,less source files
  • Noninvasive: No need to inherit other class
  • Type Safe: Checks every type of the object, and deal with the null in json
  • High Performance: Parses the json very fast and supported the nested model
  • Compare : Supported the value compare which can be multinest model
  • Copy : Provides the nested model copy from another model


The time cost of disposing 10000 times GithubUser objects (iPhone 6s).

Benchmark result

Getting Started

The conversion between JSON, Model and String

// JSON:

// Model:
@interface Person : NSObject
@property (nonatomic, assign) UInt64 uid;
@property (nonatomic, copy) NSString *name;
@property (nonatomic, assign) NSInteger age;
@implementation Person
// 1. Converting the JSON to an Model:
Person *p = [Person cs_modelWithJSONObject:json];

// 2. Converting the String to an Model:
 Person *np = [Person cs_modelWithJSONString:jsonStr];
// 3. Converting the Model to an JSON:
id json = [p cs_JSONObject];

// 4. Converting the Model to an NSString:
NSString *jsonStr =  [p cs_JSONString];

// 5. Converting the JSON Array to an Model Array:
NSArray *array = [Person cs_modelArrayWithJSONObject:jsonArray];

How to use Protocol

// 1. If a value of key in the json is an array,The json array will be
// conveted to model array by implementing this method.
+ (NSDictionary<NSString *,NSString *> *)CSModelKeyWithPropertyMapping
    return @{@"user_id":@"userId"};

// 2. If a value of key is a JSON object , implement this method to convert
// the JSON object to a model's properites.
+ (NSDictionary<NSString *,Class> *)CSModelArrayWithModelMapping{
    return @{@"child":[Person class]};

// 3. The mapping of model property and json key
+ (NSDictionary<NSString *,Class> *)CSModelDictionaryKeyWithModelMapping{
    return @{@"child":[Person class]};

The comparing and copying method

// Model 
@interface Teacher : NSObject
@property (nonatomic, copy) NSString *name;
@property (nonatomic, assign) NSInteger age;
@property (nonatomic, copy) NSString *books;
@implementation Teacher

// 1. Comparing the value of two models, supported the nested Model:
BOOL isSame = [p cs_isEqualToValue:p2];

// 2. Copying the value of an model, supported the nested Model:
Person *p2 = [p cs_modelCopy];

// 3. Copying from the different model:
Teacher *teacher1 = [Teacher cs_modelCopyFromModel:p];

The description method

// Implementing the method in the `.m file` of the Model
- (NSString *)description{
    return [self cs_description];

The coding method

// Implementing the following method in the `.m file` of the Model
- (void)encodeWithCoder:(NSCoder *)aCoder{
    [self cs_encode:aCoder];
- (instancetype)initWithCoder:(NSCoder *)aDecoder{
    return [self cs_decoder:aDecoder];


Installation with CocoaPods

  1. Specify the pod 'CSModel' to the Podfile
  2. Then, run pod install or pod update
  3. Import the header files <CSModel/CSModel.h>

Manual installation

  1. Download the CSModel source files
  2. Import the CSModel.h and related source files



CSModel is released under the MIT license. See LICENSE for details.

Get A Weekly Email With Trending Projects For These Topics
No Spam. Unsubscribe easily at any time.
objective-c (10,739)Β 
json (1,088)Β 
model (105)Β 
runtime (104)Β 
dictionary (97)Β 
array (69)Β 
cocoapod (29)Β 

Find Open Source By Browsing 7,000 Topics Across 59 Categories