Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone Objective-C类别和性质_Iphone_Objective C_Ios5 - Fatal编程技术网

Iphone Objective-C类别和性质

Iphone Objective-C类别和性质,iphone,objective-c,ios5,Iphone,Objective C,Ios5,在Objective-C中,我可以创建类别来扩展类。我还可以向它们添加属性,因为它们基本上是唯一的方法。然而,我不能用@synthetic或我知道的任何其他方式来绑定它们。因此,每当我尝试使用它们时,应用程序都会崩溃 属性在类别中是否有任何用途,或者它们只是可能的,因为禁止它们会破坏语言的逻辑。您能给我一个在类别中定义属性有意义的场景吗?来自指南 类别允许您将方法添加到现有类,甚至添加到现有类 您没有其来源。类别是一个强有力的工具 允许您扩展现有功能的功能 没有子类化的类 既然你想 向它们添加属

在Objective-C中,我可以创建类别来扩展类。我还可以向它们添加属性,因为它们基本上是唯一的方法。然而,我不能用@synthetic或我知道的任何其他方式来绑定它们。因此,每当我尝试使用它们时,应用程序都会崩溃

属性在类别中是否有任何用途,或者它们只是可能的,因为禁止它们会破坏语言的逻辑。您能给我一个在类别中定义属性有意义的场景吗?

来自指南

类别允许您将方法添加到现有类,甚至添加到现有类 您没有其来源。类别是一个强有力的工具 允许您扩展现有功能的功能 没有子类化的类

既然你想

向它们添加属性,因为它们基本上只是方法


您可以使用category向类中添加方法。

在category中定义属性的主要用途是创建类扩展,在创建类扩展时,借助category,我们可以在那里定义属性并合成它们。这是实现隐藏属性以供公共访问的方法


有关详细信息,您可以查看此项-

以及用于类扩展的类别。@rishi文档中说“类扩展类似”。这意味着类扩展和类别是两种不同的东西类扩展和类别确实非常不同。在一个扩展中,我可以定义一个属性,但不能将其合成。在类别中,我无法合成属性。但是我也不能创建IVAR,因此我也不能真正为自己实现getter和setter。当然,我可以添加属性,但是如果我不能将它们绑定到任何变量,它们有什么用呢?我不会将属性添加到类别实现中。文档状态类别用于添加方法。为什么要改变语言去做你想做的事?子类化非常适合将IVAR和方法添加到现有类中。类别不是扩展:删除了downvote,因为您的答案确实解决了问题,但我仍然支持不支持属性关联对象的类别!=正确的属性,两者是不一样的。但如果有需要,我们可以用这种方式使用房产。请看我对你另一个问题的回答:(为什么你问了两次基本相同的问题?)谢谢。我想,除了解决我的具体问题之外,还有一个更一般的问题,关于类别中的属性对什么有好处,这可能会很有趣。然而,您的答案似乎已经提供了这两个方面的信息:可能重复的