参考:http://blog.csdn.net/east5683/article/details/45875713
#import <Foundation/Foundation.h>
@interface DLGTest : NSObject
{
NSLock *myLock;
NSArray *myArray;
NSString *myString;
BOOL myFlag;
}
@property(nonatomic,strong)NSTimer *timer;
@property(nonatomic,copy)NSString *str;
@property(nonatomic,assign)NSUInteger sum;
@end
#import "DLGTest.h"
@interface DLGTest()
@property(nonatomic,copy)NSString *str2;
@end
@implementation DLGTest
@end
//class_copyPropertyList与class_copyIvarList的区别
//class_copyPropertyList获取由@property声明的属性
//class_copyIvarList获取的所有的成员变量
id classObj = objc_getClass([@"DLGTest" UTF8String]);
unsigned int count = 0;
unsigned int Icount = 0;
//获取属性列表
objc_property_t *properties = class_copyPropertyList(classObj, &count);
Ivar *ivars = class_copyIvarList(classObj, &Icount);
NSLog(@"count==%d ,Icount==%d",count,Icount);
for (int i=0; i<count; i++) {
objc_property_t property = properties[i];
//获取属性名称
NSString *propertyName = [[NSString alloc]initWithCString:property_getName(property) encoding:NSUTF8StringEncoding];
NSLog(@"propertyName==%@",propertyName);
}
for (int i=0; i<Icount; i++) {
NSString *memberName = [NSString stringWithUTF8String:ivar_getName(ivars[i])];
NSLog(@"memberName==%@",memberName);
}
输出:
AppDelegate.m:34 count==4 ,Icount==8
AppDelegate.m:39 propertyName==str2
AppDelegate.m:39 propertyName==timer
AppDelegate.m:39 propertyName==str
AppDelegate.m:39 propertyName==sum
AppDelegate.m:43 memberName==myLock
AppDelegate.m:43 memberName==myArray
AppDelegate.m:43 memberName==myString
AppDelegate.m:43 memberName==myFlag
AppDelegate.m:43 memberName==_timer
AppDelegate.m:43 memberName==_str
AppDelegate.m:43 memberName==_sum
AppDelegate.m:43 memberName==_str2