OC基本常識

2854 ワード

判定対象タイプ
-(BOOL) isKindOfClass: classObj 
-(BOOL) isMemberOfClass: classObj  

ダイナミックジャンプページ
- (void)pushByPrama:(NSDictionary *)pramas{
    //  
    NSString *class = [NSString stringWithFormat:@"%@",pramas[@"class"]];
    const char *className = [class cStringUsingEncoding:NSASCIIStringEncoding];
    Class newClass = objc_getClass(className);
    
    if (!newClass) {
        //   
        Class superClass = [NSObject class];
        newClass = objc_allocateClassPair(superClass, className, 0);
        //   
        objc_registerClassPair(newClass);
        newClass = objc_allocateClassPair(superClass, className, 0);
        //   
        objc_registerClassPair(newClass);
    }
    //   
    id instance = [[newClass alloc]init];
    //   
    NSDictionary *propertys = pramas[@"property"];
    
    [propertys enumerateKeysAndObjectsUsingBlock:^(id  _Nonnull key, id  _Nonnull obj, BOOL * _Nonnull stop) {
        //  
        if ([self checkIsExistPropertyWithInstance:instance verifyPropertyName:key]) {
            //  KVC 
            [instance setValue:obj forKey:key];
        }
    }];
    
    //   
    UITabBarController *tabVC = (UITabBarController *)self.window.rootViewController;
    UINavigationController *pushClassStance = (UINavigationController *)tabVC.viewControllers[tabVC.selectedIndex];
    [pushClassStance pushViewController:instance animated:YES];
}

//  
- (BOOL)checkIsExistPropertyWithInstance:(id)instance verifyPropertyName:(NSString *)verifyPropertyName
{
    unsigned int outCount,i;
    //   
    objc_property_t *properties = class_copyPropertyList([instance class], &outCount);
    
    for (i = 0; i

データストア
次に主にストレージオブジェクトの問題について説明します.オブジェクトを格納する場合はnscodingプロトコルを行います.保存と取り出しにはencoderとdecodeを使用する必要があります.オブジェクトに別のプライベートが含まれている場合.nscodingプロトコルはたくさん書かなければなりません.だから私たちは直接jsonを格納することができて、json自身は1つの文字列(一般的に1つの辞書)で、文字列に対して格納して、それから使う時辞書のモデルを回転します

- (QDMySecureLevelResponse *)readBaseInfo{
    // json  
    NSData *data = [UCSInfo shareInfo].safeCenterData;
    
    NSDictionary *safeCenterData = [NSKeyedUnarchiver unarchiveObjectWithData:data];
    
    QDMySecureLevelResponse *response = [QDMySecureLevelResponse mj_objectWithKeyValues:safeCenterData];
    
    return response;
}

- (void)updataBaseInofoWithQDMySecureLevelResponse:(QDMySecureLevelResponse *)result{
    
    NSDictionary *dict =  result.mj_keyValues;
    NSData *data = [NSKeyedArchiver archivedDataWithRootObject:dict];

//  json 
    [[UCSInfo shareInfo]setSafeCenterData:data];
}

[runtime問題](神経病院objc runtime入院試験)