gpt4 book ai didi

objective-c - apple 的对象如何在描述中显示属性,我可以这样做吗?

转载 作者:搜寻专家 更新时间:2023-10-30 20:25:45 27 4
gpt4 key购买 nike

我有一个具有两个属性的对象 - typename - 我想在它的 description 中显示。开箱即用的描述如下所示:

<SGBMessage: 0x7663bb0>

如果我覆盖description,像这样:

return [NSString stringWithFormat:@"<%@: %x type:%@ name%@>", 
[self class], (int)self, self.type, self.name];

然后我可以得到这样一个很好的描述:

<SGBMessage: 0x7663bb0 type:loadScreen name:mainScreen>

到目前为止,还不错。但是苹果的对象有动态描述;如果我查看 View 的描述,我会得到以下信息:

<UIView: 0x767bcb0; frame = (0 0; 0 0); layer = <CALayer: 0x767bd50>>

但是如果我将 hidden 设置为 true,我会得到:

<UIView: 0x767bcb0; frame = (0 0; 0 0); hidden = YES;
layer = <CALayer: 0x767bd50>>

现在,我一秒钟都不相信他们在所有对象的 description 方法中有大量的 if 语句;似乎更有可能在 NSObject 某处的某个类别中有一些方法可以被覆盖以指定在描述中显示哪些属性。有谁知道真正发生了什么,如果是这样,我可以利用它吗?

最佳答案

我的倾向于遵循这种模式:

- (NSString *) description {
NSMutableDictionary *descriptionDict = [[NSMutableDictionary alloc]init];
if (account) [descriptionDict setObject:account forKey:@"account"];
if (date) [descriptionDict setObject:date forKey:@"date"];
if (contentString) [descriptionDict setObject:contentString forKey:@"contentString"];
return [descriptionDict description];
}

您可以使用类似的方法构建一个 NSMutableArray,然后遍历该数组,将其中的内容添加到字符串中。

对于更复杂的app,如果你有继承自其他类的自定义类,你也可以做一个单独的方法返回descriptionDict,然后在子类中调用NSMutableDictionary *descriptionDict = [super descriptionDict] 并继续向其中添加/删除元素。

NOTE: The reason I use if statements on each line is that if one object happens to be nil, an exception is thrown. This will cause "no objective c description available" to print when you try to po your object.

但要回答您的问题,没有 secret 方法可以使某些属性出现在描述中。您只需要通过您认为合适的任何方式自己构建一个字符串。

关于objective-c - apple 的对象如何在描述中显示属性,我可以这样做吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13154804/

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