अद्यतन: इस तरह के सामान को देखने वाला कोई भी व्यक्ति ऑब्जेक्टिव-सी रनटाइम के लिए माइक ऐश के ओबीजीसी रैपर की जांच कर सकता है ।
यह कमोबेश आप इसके बारे में कैसे जाना है:
#import <objc/runtime.h>
. . .
-(void)dumpInfo
{
Class clazz = [self class];
u_int count;
Ivar* ivars = class_copyIvarList(clazz, &count);
NSMutableArray* ivarArray = [NSMutableArray arrayWithCapacity:count];
for (int i = 0; i < count ; i++)
{
const char* ivarName = ivar_getName(ivars[i]);
[ivarArray addObject:[NSString stringWithCString:ivarName encoding:NSUTF8StringEncoding]];
}
free(ivars);
objc_property_t* properties = class_copyPropertyList(clazz, &count);
NSMutableArray* propertyArray = [NSMutableArray arrayWithCapacity:count];
for (int i = 0; i < count ; i++)
{
const char* propertyName = property_getName(properties[i]);
[propertyArray addObject:[NSString stringWithCString:propertyName encoding:NSUTF8StringEncoding]];
}
free(properties);
Method* methods = class_copyMethodList(clazz, &count);
NSMutableArray* methodArray = [NSMutableArray arrayWithCapacity:count];
for (int i = 0; i < count ; i++)
{
SEL selector = method_getName(methods[i]);
const char* methodName = sel_getName(selector);
[methodArray addObject:[NSString stringWithCString:methodName encoding:NSUTF8StringEncoding]];
}
free(methods);
NSDictionary* classDump = [NSDictionary dictionaryWithObjectsAndKeys:
ivarArray, @"ivars",
propertyArray, @"properties",
methodArray, @"methods",
nil];
NSLog(@"%@", classDump);
}
वहां से, उदाहरण की संपत्तियों के वास्तविक मूल्यों को प्राप्त करना आसान है, लेकिन आपको यह देखने के लिए जांचना होगा कि क्या वे आदिम प्रकार या ऑब्जेक्ट हैं, इसलिए मैं इसे डालने के लिए बहुत आलसी था। आप विरासत श्रृंखला को स्कैन करने का विकल्प भी चुन सकते हैं। एक वस्तु पर परिभाषित सभी गुण प्राप्त करें । फिर श्रेणियों पर परिभाषित तरीके हैं, और अधिक ... लेकिन लगभग सब कुछ आसानी से उपलब्ध है।
यहाँ एक उदाहरण दिया गया है कि उपरोक्त कोड क्या है UILabel के लिए:
{
ivars = (
"_size",
"_text",
"_color",
"_highlightedColor",
"_shadowColor",
"_font",
"_shadowOffset",
"_minFontSize",
"_actualFontSize",
"_numberOfLines",
"_lastLineBaseline",
"_lineSpacing",
"_textLabelFlags"
)
methods = (
rawSize,
"setRawSize:",
"drawContentsInRect:",
"textRectForBounds:",
"textSizeForWidth:",
. . .
)
properties = (
text,
font,
textColor,
shadowColor,
shadowOffset,
textAlignment,
lineBreakMode,
highlightedTextColor,
highlighted,
enabled,
numberOfLines,
adjustsFontSizeToFitWidth,
minimumFontSize,
baselineAdjustment,
"_lastLineBaseline",
lineSpacing,
userInteractionEnabled
)
}