extension和category(二)

上文:http://www.cnblogs.com/beautylcy/p/7144991.html

Student目前拥有的实例变量、属性、方法有(sno、cno、_name)(name、avarta)(goHome、init、name、setName、goHome、setAvarta、avarta) ps:同时存在两个同名方法

SubStudent目前拥有的实例变量、属性、方法有(sno、cno、_name)(name、avarta)(goHome、init、name、setName、goHome、setAvarta、avarta、getImage)

接下来分别打印Student和Substudent对象的实例变量列表,属性列表,方法列表,看看是否如期。

打印Student对象

 Student *s1 = [[Student alloc] init];
    int outCount = 0;
    Ivar *variables = class_copyIvarList(s1.class, &outCount);
    for(int i = 0; i < outCount; i++){
        Ivar ivar = variables[i];
        const char *propertyName = ivar_getName(ivar);
        const char *propertyType = ivar_getTypeEncoding(ivar);
        NSString *propertyNameString = [NSString stringWithUTF8String:propertyName];
        NSString *propertyTypeString = [NSString stringWithUTF8String:propertyType];
        NSLog(@"propertyNameString:%@",propertyNameString);
        NSLog(@"propertyTypeString:%@",propertyTypeString);
    }
    
    Method *methods = class_copyMethodList(s1.class, &outCount);
    for(int i = 0; i < outCount; i++){
        Method mtd = methods[i];
        SEL sel = method_getName(mtd);
        NSString *name = NSStringFromSelector(sel);
        NSLog(@"methodName:%@",name);
    }
    
    objc_property_t *properties =  class_copyPropertyList(s1.class, &outCount);
    for(int i = 0; i < outCount; i++){
        objc_property_t proty = properties[i];
        const char * name = property_getName(proty);
        const char * attr = property_getAttributes(proty);
        NSString * propertyName = [NSString stringWithUTF8String:name];
        NSLog(@"propertyName:%@",propertyName);
    }

结果如下

017-07-20 19:40:28.098 Category[4211:312047] propertyNameString:sno

2017-07-20 19:40:28.098 Category[4211:312047] propertyTypeString:@"NSString"

2017-07-20 19:40:28.098 Category[4211:312047] propertyNameString:cno

2017-07-20 19:40:28.099 Category[4211:312047] propertyTypeString:@"NSString"

2017-07-20 19:40:28.099 Category[4211:312047] propertyNameString:_name

2017-07-20 19:40:28.099 Category[4211:312047] propertyTypeString:@"NSString"

2017-07-20 19:40:28.099 Category[4211:312047] methodName:goHome

2017-07-20 19:40:28.099 Category[4211:312047] methodName:goHome

2017-07-20 19:40:28.099 Category[4211:312047] methodName:avarta

2017-07-20 19:40:28.099 Category[4211:312047] methodName:setAvarta:

2017-07-20 19:40:28.100 Category[4211:312047] methodName:.cxx_destruct

2017-07-20 19:40:28.100 Category[4211:312047] methodName:name

2017-07-20 19:40:28.100 Category[4211:312047] methodName:setName:

2017-07-20 19:40:28.100 Category[4211:312047] methodName:init

2017-07-20 19:40:28.100 Category[4211:312047] propertyName:avarta

2017-07-20 19:40:28.100 Category[4211:312047] propertyName:name

 

 

打印SubStudent对象结果如下

2017-07-20 20:32:52.563 Category[4655:351200] methodName:getImage

 

从父类继承的实例变量、属性、方法都不会存在子类的实例变量列表,属性列表,方法列表中。所以只有getImage被打印

posted @ 2017-07-20 20:38  一坨☁️  阅读(201)  评论(0编辑  收藏  举报