Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.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 将C结构重写为ObjC类(C结构与ObjC类)_Objective C_Class_Struct - Fatal编程技术网

Objective c 将C结构重写为ObjC类(C结构与ObjC类)

Objective c 将C结构重写为ObjC类(C结构与ObjC类),objective-c,class,struct,Objective C,Class,Struct,我读了这篇文章: 我已经在考虑在我的ObjC应用程序中使用类而不是结构,但是文章说它需要更多的内存 我还阅读了这个问题的精选答案: 它表示类中的变量默认为私有,但C++中的变量是否默认为Objc中的私有?我不这么认为,因为如果我在ObjC中有一个@property,那么我可以从另一个对象访问它 最后,如果我要创建一个只实现C结构的对象,那么使用@public{}和@property有什么区别 编辑 对于未来的读者来说,这三个答案都需要阅读。所有答案都回答了问题,但我必须选择并回答,这就是我选择其

我读了这篇文章:

我已经在考虑在我的ObjC应用程序中使用类而不是结构,但是文章说它需要更多的内存

我还阅读了这个问题的精选答案: 它表示类中的变量默认为私有,但C++中的变量是否默认为Objc中的私有?我不这么认为,因为如果我在ObjC中有一个@property,那么我可以从另一个对象访问它

最后,如果我要创建一个只实现C结构的对象,那么使用@public{}和@property有什么区别

编辑


对于未来的读者来说,这三个答案都需要阅读。所有答案都回答了问题,但我必须选择并回答,这就是我选择其中一个的原因。

我不会担心Objective-C类与
结构相比需要额外的内存,除非您在内存中存储了大量对象。那么它可能值得考虑。使用Objective-C类还可以获得其他好处


WRT对公共和财产;您不希望对象之外的代码“一般”地干扰实例变量。在某些情况下,这并不重要,您可以使用
@property
/
@synthesis
,而不用担心,但是有时您可能希望验证所分配的值,或者在分配特定值时执行某些操作。从一开始就使用属性允许您在不影响任何使用您的类的代码的情况下对其进行更改。

我不会担心Objective-C类与
结构相比需要额外的内存,除非您在内存中存储了大量的对象。那么它可能值得考虑。使用Objective-C类还可以获得其他好处


WRT对公共和财产;您不希望对象之外的代码“一般”地干扰实例变量。在某些情况下,这并不重要,您可以使用
@property
/
@synthesis
,而不用担心,但是有时您可能希望验证所分配的值,或者在分配特定值时执行某些操作。从一开始就使用属性允许您在不影响任何使用您的类的代码的情况下对其进行更改。

先用简单的方法进行更改,然后如果您发现评测实际运行的代码占用的内存太大,请重新考虑

基本上,Obj-C类是一个结构。它是一个结构,有一个指向类对象的指针,以及超类和该类声明的所有IVAR

通过使用易于内存管理的类和对象以及不使用的集合类(除非在非常特殊的情况下),您可以获得很多好处

关于第二个问题。。。通常,您总是希望在
obj->iVar

这保持了封装,还允许对setter进行验证。。。并触发KVO通知

所以基本上:

除非有理由不使用对象/类。

使用属性,除非你有理由不这样做。

先用简单的方法,然后如果你发现剖析实际运行的代码内存占用太大,那么重新考虑

基本上,Obj-C类是一个结构。它是一个结构,有一个指向类对象的指针,以及超类和该类声明的所有IVAR

通过使用易于内存管理的类和对象以及不使用的集合类(除非在非常特殊的情况下),您可以获得很多好处

关于第二个问题。。。通常,您总是希望在
obj->iVar

这保持了封装,还允许对setter进行验证。。。并触发KVO通知

所以基本上:

除非有理由不使用对象/类。
使用属性,除非您有理由不使用

它说类中的变量默认为private,但是 对于C++,它们在Objc中默认为私有吗? Objective-C中
@接口
中声明的实例变量默认为
@受保护
。在Objective-C中的
@实现中声明的实例变量默认为
@private
。你可以手动使用<代码> @ Pube < /Cube >,<代码> @保护,<代码> @私下<代码>,就像C++一样。 我不这么认为,因为如果我在ObjC中有一个@property,那么我就可以访问它 从另一个物体

属性访问正在调用一个方法。它与实例变量访问完全不同

它说类中的变量默认为private,但是 对于C++,它们在Objc中默认为私有吗? Objective-C中
@接口
中声明的实例变量默认为
@受保护
。在Objective-C中的
@实现中声明的实例变量默认为
@private
。你可以手动使用<代码> @ Pube < /Cube >,<代码> @保护,<代码> @私下<代码>,就像C++一样。 我不这么认为,因为如果我在ObjC中有一个@property,那么我就可以访问它 从另一个物体


属性访问正在调用一个方法。它与实例变量访问完全不同。< /P>对象ObjyC对象需要一个类指针,类似于一个虚拟C++类。我怀疑它可能还有更多的字节“气体”,在这里和那里,虽然我从来没有见过对对象结构的描述。ObjtoVoC对象需要一个类指针,类似于一个虚拟C++类。我怀疑它可能还有几个字节的“gas”,尽管我从未见过对象结构的描述。