我正在阅读Apple的基本内存管理规则文档。我遇到了一个句子,即“任何对象可能有一个或多个所有者。”
这是什么意思?具有2个所有者的对象。 我对OOP概念并不熟悉。
答案 0 :(得分:3)
在内存管理中,如果一个对象拥有对另一个对象的引用,它将保留它。
多个对象可以保留一个对象,当对象上没有保留时,没有人拥有它并且它会消失。保留会增加引用计数,释放会减少它。
一个很好的类比是给宠物添加皮带。多个人可以添加皮带,但如果没有皮带,它就会消失:)
如果您要使用对即时函数之外的对象的引用,那么您应该保留它。如果你调用alloc,copy,mutableCopy来获取引用,那么你就保留了它。如果你通过另一个消息名称得到它,标准是它是自动释放的(这很好)并且将在该函数范围之外的某个近点消失。
答案 1 :(得分:2)
“拥有”意味着“持有”。 iOS内存管理是显式的,它是通过引用计数完成的。发送到对象的“保留”消息增加了引用计数,“释放”消息减少了引用计数。当引用计数达到0时,释放对象(并首先发送“dealloc”消息)。这适用于NSObject层次结构中的对象。
因此,当一个对象被传递给它想要在将来的某个时间继续使用的对象时,该对象会保留指向该对象的指针的副本并向其发送“保留”消息,以便当“所有者”想要访问它时,不会释放对象。