Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.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
Objective c 数据封装。。。?_Objective C_Encapsulation - Fatal编程技术网

Objective c 数据封装。。。?

Objective c 数据封装。。。?,objective-c,encapsulation,Objective C,Encapsulation,有人能给我解释一下Objective-C中的数据封装是什么吗?我被告知这是Objective-C的一个重要概念,但我不明白为什么 像我5岁那样向我解释,然后像我25岁那样向我解释 谢谢你抽出时间, ~Daniel来自: 我们所说的数据封装是 该数据被包含(可以说) 通过访问它的方法,我们可以 需要使用方法。你们当中有些人 已经用其他语言编程,并且 我没听说过数据封装 可能想知道我们为什么要这么做 对。答案是 封装数据,有一个很好的方法 在显影剂之间的缓冲 类和类的用户。因为 类方法管理和维护 类

有人能给我解释一下Objective-C中的数据封装是什么吗?我被告知这是Objective-C的一个重要概念,但我不明白为什么

像我5岁那样向我解释,然后像我25岁那样向我解释

谢谢你抽出时间, ~Daniel

来自:

我们所说的数据封装是 该数据被包含(可以说) 通过访问它的方法,我们可以 需要使用方法。你们当中有些人 已经用其他语言编程,并且 我没听说过数据封装 可能想知道我们为什么要这么做 对。答案是 封装数据,有一个很好的方法 在显影剂之间的缓冲 类和类的用户。因为 类方法管理和维护 类中的属性 可以更轻松地维护数据 诚实正直另一个主要好处是 当一个开发者发布他的 类,使用它的人没有 去担心 上课。开发人员可以更新 方法以使其更快或更快 高效,但此更新是 对类的用户透明 因为他/她仍然使用相同的方法 无需更改其代码

简单地说,向用户提供开发人员希望他们拥有的东西,并“保护”其他一切。开发人员可以更改任何内部内容,而无需用户重写其代码


如果开发人员不遵守数据封装,那么每次发布新版本的库、代码片段或整个程序时,我们都需要重写代码。

Objective-C中的数据封装意味着只有类本身应该接触它的实例变量。因此,您应该始终将它们标记为私有,并且仅通过属性公开它们,如下所示:

@interface Foo : NSObject {
@private
    int numberOfBars;
    Baz* contentBaz;
}
@property(nonatamic, assign) int numberOfBars;
@property(nonatomic, retain) Baz* contentBaz;
@end

这意味着该类可以在其setter方法中实现验证。如果您使用
@synthesis
生成getter和setter,那么您甚至不必担心Cocoa的内存模型(除了在dealoc中释放IVAR)。

FWIW:数据封装决不是特定于Objective C,甚至也不是面向对象编程,相反,它是一种非常通用的技术,用于控制几乎任何编程环境中的一类复杂性。出于某种原因,目标C中的几乎所有内容都是“那样的”。。所有的概念都有可爱的、抽象的、半相关的英文“名字”。。不幸的是,这在一起完全没有意义……除非你明白……然后,一个开关翻转,每个不明白的人都显得愚蠢。我发誓…他们抽象概念的方式正处于普通人所能理解的边缘。。一旦你得到它。。你几乎害怕回去解释它,哈哈。这太神奇了。你用一句话解释了。如果你用更多的细节解释了这个例子,那就太好了。无论如何谢谢你。@Peylow-说得很好!