gpt4 book ai didi

objective-c - 如何动态确定 Objective-C 属性类型?

转载 作者:可可西里 更新时间:2023-11-01 05:31:43 24 4
gpt4 key购买 nike

我正在尝试动态确定 Objective-C 中的属性类型。根据我在本网站和其他地方阅读的内容,我相信我做的是正确的。但是,我的代码不起作用。

下面的代码片段演示了这个问题。试图获取“backgroundColor”和“frame”的属性信息,这两个都是 UIView 的有效属性,失败(class_getProperty() 返回 NULL):

id type = [UIView class];        
objc_property_t backgroundColorProperty = class_getProperty(type, "backgroundColor");
fprintf(stdout, "backgroundColorProperty = %d\n", (int)backgroundColorProperty); // prints 0

objc_property_t frameProperty = class_getProperty(type, "frame");
fprintf(stdout, "frameProperty = %d\n", (int)frameProperty); // prints 0

按照描述枚举属性 here也不会产生预期的结果。以下代码:

NSLog(@"Properties for %@", type);
unsigned int outCount, i;
objc_property_t *properties = class_copyPropertyList(type, &outCount);
for (i = 0; i < outCount; i++) {
objc_property_t property = properties[i];
fprintf(stdout, "%s %s\n", property_getName(property), property_getAttributes(property));
}

生成此输出:

2012-03-09 13:18:39.108 IOSTest[2921:f803] Properties for UIView
caretRect T{CGRect={CGPoint=ff}{CGSize=ff}},R,N,G_caretRect
gesturesEnabled Tc,N
deliversTouchesForGesturesToSuperview Tc,N
skipsSubviewEnumeration Tc,N
viewTraversalMark Tc,N
viewDelegate T@"UIViewController",N,G_viewDelegate,S_setViewDelegate:
inAnimatedVCTransition Tc,N,GisInAnimatedVCTransition
monitorsSubtree Tc,N,G_monitorsSubtree,S_setMonitorsSubtree:
backgroundColorSystemColorName T@"NSString",&,N,G_backgroundColorSystemColorName,S_setBackgroundColorSystemColorName:
userInteractionEnabled Tc,N,GisUserInteractionEnabled
tag Ti,N,V_tag
layer T@"CALayer",R,N,V_layer

缺少“backgroundColor”、“frame”等记录的属性,而包括“caretRect”和“gesturesEnabled”等未记录的属性。

如有任何帮助,我们将不胜感激。如果相关,我会在 iOS 模拟器上看到这种行为。我不知道在实际设备上是否会发生同样的事情。

谢谢,格雷格

最佳答案

您正在获取 UIView 属性,问题是 backgroundColor 不是 UIView 属性,而是类别属性。检查 UIView.h。我认为您无法获得 objc_category,但可以查看类转储。

关于objective-c - 如何动态确定 Objective-C 属性类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9639250/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com