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
Objective c 目标C';s弧vs C++';s的手动内存管理_Objective C_Memory Management_Automatic Ref Counting - Fatal编程技术网

Objective c 目标C';s弧vs C++';s的手动内存管理

Objective c 目标C';s弧vs C++';s的手动内存管理,objective-c,memory-management,automatic-ref-counting,Objective C,Memory Management,Automatic Ref Counting,一个可能的试题如下: “与C++相比,解释Objective C内存管理的优点和缺点” 我知道Objective C使用ARC,ARC使我们能够避免破坏仍然被其他对象引用的对象(也就是说,它仍然需要)。但我在任何地方都找不到任何缺点。我只能认为“没有缺点”是一个答案,但既然这个问题明确要求缺点,我猜肯定至少有一个缺点 引用计数可以解决您没有的问题。它是有代价的,不管你是否想要解决方案,你最终都要付出代价 与直觉可能说的相反,大多数物体实际上根本不需要共享,而是在它们的整个生命中都有一个明确的、独

一个可能的试题如下:

“与C++相比,解释Objective C内存管理的优点和缺点”


我知道Objective C使用ARC,ARC使我们能够避免破坏仍然被其他对象引用的对象(也就是说,它仍然需要)。但我在任何地方都找不到任何缺点。我只能认为“没有缺点”是一个答案,但既然这个问题明确要求缺点,我猜肯定至少有一个缺点

引用计数可以解决您没有的问题。它是有代价的,不管你是否想要解决方案,你最终都要付出代价

与直觉可能说的相反,大多数物体实际上根本不需要共享,而是在它们的整个生命中都有一个明确的、独特的所有权。所需要的只是能够传递这些物体;引用计数提供了这一点,但它提供了更多,而且成本更高


这个答案比较了目标C到C++风格的寿命管理中的引用计数。它不考虑Obj-C中的引用计数是否是第一个合理的。ARC只是MRC的自动化形式,如果您过去使用MRC,并且它是有意义的,那么是否迁移到ARC的问题不是这个帖子的要点。。相反,这篇文章同样适用于“Obj-C中的MRC与C++”的比较。

引用计数“解放”了你,让你不必总是想着何时删除某个对象。任何使用该对象的人都会说,我仍然需要它(想要保留它),或者我已经完成了(我释放了它)

这使得内存管理方式更容易,也使代码更易于管理 但是 它的代价是每次传递内容时都要额外调用2个方法:必须保留对象,然后保存指针,然后再调用释放它

当你处理大量的对象时,这些对象会成为现实生活中的问题。仅仅是额外的调用就可能破坏你的算法性能

特别是如果您不需要任何引用计数,因为对象的使用范围是明确的,那么开销就是令人讨厌的



因此,它是方便性+可维护性与速度

目标C不必使用ARC,它现在很常见。我在发布这篇文章之前做了一些搜索,我确实遇到了一个问题,但是,如果你读了我的问题,然后读了那篇文章中的答案,并尝试找到至少一个真正的缺点,而不是害怕使用ARC在2011年,bug和向后兼容性(意味着不再重要的设备),你不会发现任何问题。因此,我的问题不是是否使用或不使用ARC,也没有得到回答(我已经知道如何很好地使用这两种方法,因为在使用xcode时,我通常使用ObjC++编写代码)@ USER 29 70795这是一个可怕的问题,因为它忽略了其他一些关键的细节。你最好弄清楚教授/老师的任何思维方式,而不是试图从这个论坛中获得任何东西。特别是C++和ObjuleC的本质是如此不同——编译时强调与运行时强调——THA。在你的考试中,ARC与保留/发布/自动更新的一个细节与众多C++模型中的一个将是不一致的。即,你需要学习你的老师想要你学习的任何东西,忽略更大的画面。而且,ARC在很多层次上都不如MRC。在ARC之前,我们必须注意所有权和做我们自己。
retain
s和
release
s。现在,使用ARC,我们仍然必须这样做,但我们必须通过包含完全丑陋且不违反直觉(如果不是“愚蠢”的话)来掩盖我们仍然在手动编写引用计数代码的事实cast限定符,如
\uuuuu unsafe\u unrepaired
\uuuu bridge\u transfer
@H2CO3:谢谢,非常有用。不客气。IDK,如果你最近正在做/已经做过任何Objective-C编程;和往常一样,这是我的观点,但有事实支持。最后,这取决于个人偏好,所以我建议你不要如果你想/需要做出决定,请使用这两种技术。谢谢你的快速回答Kerrek SB!。你提到它是有价格的,而且它提供的更多,成本也更高。你能告诉我价格和更高的成本是多少吗?那将非常有帮助!我不认为这是一个答案,恐怕……你只会说“它”这是有代价的,因为所有真实的东西都没有说出来。