Runtime(3) 하나의 클래스에 대한 모든 내용 가져오기

2529 단어
이어서 지난 글에서 이 글은 내가 어떻게 Runtime를 통해 우리가 어떤 종류의 모든 내용을 얻고 싶은지, 설령 시스템 종류라도.그렇다면 컨트롤러에서 우리는 도대체 어떻게 Person류의 모든 내용을 얻을 수 있을까?인내심
우선 헤더 파일을 가져오는 것을 잊지 말고 다음과 같이 하세요~~~

1. ViewController에서 대상을 통해 클래스 이름을 가져옵니다

// 
const char *name = class_getName(per.class);

2. 속성 리스트 획득

    unsigned int count = 0;
    // 
    objc_property_t *pro = class_copyPropertyList(per.class, &count);
    // 
    for (unsigned int i = 0; i < count; i++) {
       const char *objcName = property_getName(pro[i]);
        NSLog(@" %d %s",i,objcName);
        // C OC 
        //NSString *key = [NSString stringWithUTF8String:name];
  }
    // 
    free(pro);

3. 구성원 변수 목록 가져오기(보다 전면적)

unsigned int _count;
    //  Ivar: 
    // &  
    Ivar * ivars = class_copyIvarList(per.class,&_count);
    
    for (int i = 0 ; i<_count i="">C 
        const char * name = ivar_getName(ivars[i]);
        // OC 
        //NSString *key = [NSString stringWithUTF8String:name];
        NSLog(@" %s",name);
        // 
        const char *namerType = ivar_getTypeEncoding(ivars[i]);
        // 
        object_setIvar(per, ivars[0], @" ");
    }
  // 
    free(ivars);

4. 하나의 종류를 얻는 모든 방법

unsigned int countMethod;
    // 
    Method * methods = class_copyMethodList(per.class, &countMethod);
    
    for (int i = 0 ; i < countMethod; i++) {
        // 
        Method method = methods[i];
        // 
        SEL methodSEL = method_getName(method);
        // C 
        const char *name = sel_getName(methodSEL);
        NSLog(@" %s",name);
        // C OC 
        NSString *methodName = [NSString stringWithUTF8String:name];
        // 
        int arguments = method_getNumberOfArguments(method);
        NSLog(@"%d == %@ %d",i,methodName,arguments);
  }
  // 
    free(methods);

5. 하나의 클래스가 따르는 모든 협의를 얻는다.

unsigned int count;

    // 
    __unsafe_unretained Protocol **protocols = class_copyProtocolList([self class], &count);

    for (int i = 0; i < count; i++) {
        // 
        Protocol *protocol = protocols[i];
        // C 
        const char *name = protocol_getName(protocol);
        //C OC 
        NSString *protocolName = [NSString stringWithUTF8String:name];
        NSLog(@"%d == %@",i,protocolName);
    }
    // 
    free(protocols);

좋은 웹페이지 즐겨찾기