【问题标题】:Whether the alloc method increments the reference count of the object [duplicate]alloc方法是否增加对象的引用计数[重复]
【发布时间】:2017-12-23 02:55:02
【问题描述】:

当我们用Class调用alloc时,对象的引用计数是否为1。

例如:

NSObject *obj = [NSObject alloc];

这行代码执行后,对象的引用计数是0还是1?

我看了alloc源码,但是没有发现alloc方法会对对象的引用计数有什么作用,此时对象的引用计数还是0?

如果为0,则对象将被销毁,如果不为0,如何实现,

希望有人能帮我解答心中的疑惑,谢谢!

【问题讨论】:

  • 你还在 ARC 之前吗? ARC 可以帮助你解决这个问题,但通常在你对一个对象执行 alloc 之后,它会得到一个引用 1。为了管理这个,如果你在 ARC 之前,你可以使用 autorelease 或 dealloc 再次给对象 0。跨度>
  • 感谢优化我的格式,我最近在看源码的时候这么一头雾水,不知道在“alloc”中,对象的引用计数是1,因为我没有找到这个问题的有效确认码
  • 这是我朋友发的文章,我也看了,但还是没能解决我心中的困惑
  • @Rushtoasktheway 实施细节;对象的保留计数存储在对象的isa 中。在分配时,isa 被初始化为包含对类的引用、保留计数 1 和一些其他元数据。除非该类实现客户保留/释放。所有这些都是实现细节,虽然有趣,但保留计数对于调试或开发目的完全没有用。

标签: ios objective-c memory-management alloc retaincount


【解决方案1】:

alloc 创建引用计数为 1 的对象。它不会创建引用计数为 0 的对象,而是增加引用计数。首先,这将是低效的(为每个创建的对象额外调用一次保留),其次,它不起作用,因为一旦对象的引用计数为 0,Objective-C 绝对会释放该对象;没有办法停止释放,其副作用之一是您无法增加或减少引用计数为零的对象的引用计数。

【讨论】:

  • “Alloc”是如何实现引用计数为1的对象,Apple是如何实现的呢?
猜你喜欢
  • 2017-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-09
  • 1970-01-01
  • 2011-03-16
  • 2012-08-27
  • 2015-06-24
相关资源
最近更新 更多