gpt4 book ai didi

iphone - 将实例变量添加到 NSData

转载 作者:行者123 更新时间:2023-12-03 21:04:10 25 4
gpt4 key购买 nike

因此,我了解到 Objective-C 中的类别可用于向类添加方法,而无需子类化。我还了解到这些类别不能用于向类添加实例变量。

我阅读了一些有关类扩展的内容,它可用于添加实例变量,但我不明白如何使用类扩展来修改现有的类,例如 NSData。

我的问题如下:

我有一个包含 NSURL 和 NSData 的核心数据模型。 NSData 显示 NSURL 的数据。当 View 需要显示数据时,我会进行以下检查:--- 如果 [NSData bytes] > 0,则显示 NSData。--- 否则,在NSURL处获取数据并在返回时显示数据

足够简单。然而,当 NSURL 更新时我遇到了问题。因此,如果我使用新图像修改 NSURL 路径,因为 [NSData bytes] 已经大于 0,我不会进行额外的调用来获取新图像。

我想要做的是向 NSData 添加一个名为 URLKey 的实例变量,该变量将保存有关数据来自何处的信息。我无法子类化 NSData,因为我正在使用 CoreData。

有人知道一些简单的解决方案吗?也许我对类扩展的理解存在差距,或者可能只是没有简单的方法。

最佳答案

类扩展应该用在你自己实现的类上,作为保持 ivars 和一些属性在头文件中隐藏的一种方式,它应该只包含在类之外可见的东西(而 ivars 不是那种东西) )。

类别用于已实现的类,作为添加附加功能的一种方式。当您想要向已知类添加一般类型的行为时,通常需要它们。例如。向 NSString +(NSString*)reversedString; 添加一个返回反转实例的方法,以便您可以像这样使用它:

NSString *someString = @"string";
NSString *reverse = [someString reversedString];
NSLog(@"%@", someString); //this would output "gnirts"

.

关于您的特定问题,我可以向您保证您的 CoreDataModel 不包含 NSURL 或 NSData。支持的类型有原语、字符串、二进制数据和可转换类型。因此,如果您愿意,您可以对 NSData 或 NSURL 进行子类化,然后通过将类型设置为“可转换”来将其与 CoreData 一起使用。完成此操作后,您可以根据需要对 NSData 进行子类化并在此过程中使用类扩展,或者仅使用类别将您需要的方法添加到类中。

Apple 关于可转换属性的引用:

The idea behind transformable attributes is that you access an attribute as a non-standard type, but behind the scenes Core Data uses an instance of NSValueTransformer to convert the attribute to and from an instance of NSData. Core Data then stores the data instance to the persistent store.

关于iphone - 将实例变量添加到 NSData,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9020083/

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