当我应该使用保留和分配时,有没有什么好的规则可以学习?如何知道我是否需要保留或分配房产?
33
A
回答
4
我会认为,在处理对象时,您几乎总是使用retain而不是assign,并且在处理基本类型,结构等时,您将使用assign(因为您不能保留非对象)。那是因为你想让属性的对象决定何时完成对象,而不是别的。 Apple的内存管理指南指出:
有时您不希望 收到的对象被丢弃;对于 示例,您可能需要将 对象缓存在实例变量中。在 这种情况下,只有当您知道何时不再需要对象 ,所以您需要 需要电源才能确保 对象未被丢弃,而您的 仍在使用它。你这样做了 保留的消息,它可以停留未决自动释放的效果 (或抢占 后来释放或自动释放 消息)。通过保持一个对象,你 确保它不会被释放 ,直到你用它做。
有关使用副本vs保留的讨论,请参阅this SO question。
0
如果您打算保留该对象,并使用它,使用保留。否则,它可能会被释放,最终会出现代码错误。
53
分配为像BOOL,NSInteger的或双原始值。对于使用保留或复制的对象,取决于您是要保留对原始对象的引用还是复制该对象。
唯一相同的例外是弱引用,要一个指针保持一个对象,但不能保留它,因为参考周期。这方面的一个例子就是委托模式,其中一个对象(例如一个表格视图)保存一个指向其委托的指针。由于委托对象保留了表视图,因此让表视图保留委托将意味着任何一个都不会被释放。在这种情况下使用弱引用。在这种情况下,您可以在创建财产时使用分配。
4
我知道这是一个古老的问题,但我发现这些指导从超级大师马特加拉格尔,超级有用:http://cocoawithlove.com/2009/07/rules-to-avoid-retain-cycles.html。在我的情况下,我有一个“保留地狱”我自己制作一个难引用一个父对象。下面
相关问题
- 1. 保留容量是否会产生两个分配或只有一个分配?
- 2. 我如何知道我是否需要更多实例?
- 3. 我如何知道平台项目是否也需要NuGet包
- 4. 如何知道我是否需要使用Markdown库?
- 5. 如何知道python我需要小数?
- 6. 我需要知道如何使用string.maketrans
- 7. 如何知道我需要哪个RedirectToAction?
- 8. 如何知道已分离的JPA实体是否已被保留?
- 9. 我需要知道我是否正确使用getline
- 10. 我不知道我是否使用&&或||
- 11. 保留周期,弱房地产
- 12. 我如何知道CPU是否是Haswell或不是
- 13. 如何知道图像是否需要缩小?
- 14. 我是否需要保留自动释放对象?
- 15. 我是否需要保留对FileSystemWatcher的引用?
- 16. 不知道我是否需要这里的WakeLock
- 17. 的java总之我怎么能知道是否需要携带
- 18. 我是否需要知道PHP,使自举一个WordPress主题?
- 19. 我是否需要知道Python才能使用OpenCV
- 20. 我是否需要知道Emacs Lisp才能使用GNU/Emacs
- 21. 编译器如何知道是否要扩展零或一个?
- 22. 我需要知道COMET是如何工作的
- 23. 如何知道我是否需要删除C++中的某些内容?
- 24. 如何知道我的Magento主题是否需要脚本化脚本?
- 25. 我如何知道在Azure Web角色中是否需要完整的IIS?
- 26. spring-data-jpa:我是否需要配置自己的生产?
- 27. SQL需要分组,但我不知道它是如何应用的
- 28. 如何知道我是否在回传?
- 29. 我如何知道Rabbitmq是否成功?
- 30. 模板参数是否需要前向声明或者是否需要知道类型定义
出色答卷。如果你可以将其中一个标记为已接受,那将会很棒 – memmons 2011-11-07 23:39:32