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被打印