- (NSDictionary *)toDictionary { NSMutableDictionary *dictionaryFormat = [NSMutableDictionary dictionary]; // 取得當前類類型 Class cls = [self class]; unsigned int ivarsCnt = 0; // 獲取類成員變量列表,ivarsCnt爲類成員數量 Ivar *ivars = class_copyIvarList(cls, &ivarsCnt); // 遍歷成員變量列表,其中每一個變量都是Ivar類型的結構體 for (const Ivar *p = ivars; p < ivars + ivarsCnt; ++p) { Ivar const ivar = *p; // 獲取變量名 NSString *key = [NSString stringWithUTF8String:ivar_getName(ivar)]; // 若此變量未在類結構體中聲明而只聲明爲Property,則變量名加前綴 '_'下劃線 // 好比 @property(retain) NSString *abc;則 key == _abc; // 獲取變量值 id value = [self valueForKey:key]; // 取得變量類型 // 經過 type[0]能夠判斷其具體的內置類型 const char *type = ivar_getTypeEncoding(ivar); if (value) { [dictionaryFormat setObject:value forKey:key]; } } return dictionaryFormat; }