我们在这里增加引用计数吗?

时间:2016-04-08 19:44:16

标签: objective-c properties retain retaincount

我读过几个问题,但我仍然感到困惑。我看了这个: Objective-C ARC: strong vs retain and weak vs assign以及其他一些问题

当我们说:someObject.color = customColor

我们是通过retain增加customColor的引用计数还是通过copy创建新对象?还是没有?

3 个答案:

答案 0 :(得分:3)

该语句分配给一个属性,即在someObject的类上调用一个setter方法。那么,这将取决于该方法的实现方式。如果这是基于属性的自动生成的setter方法,则:如果它是copy属性,则将在customColor上调用-copy方法;如果strong则会保留(即增加引用次数),或者如果weakassign则不会增加引用次数。

请注意,在某些不可变类上,-copy方法实现为只返回self,因此它就像一个retain - 它并不总是一个不同的对象引用。

答案 1 :(得分:1)

正如official documentation所述:

  

有三种可保留对象指针类型:

     
      
  • 块指针(通过将插入符号(^)声明符sigil应用于函数类型而形成)
  •   
  • Objective-C对象指针(id,Class,NSFoo *等)
  •   
  • 使用属性((NSObject))
  • 标记的typedef   

当我们处理Objective-C对象指针(指示指向对象位置的位模式)时,代码是这样的:

  UIColor *color1 = [UIColor whiteColor];

  // Increase reference count of color1 by 1, without copying it.
  UIColor *color2 = color1;

在赋值期间,对象没有被复制,但是它们的引用是(随着引用计数的增加)。

关于您的情况,如其他评论中所述,它取决于属性属性:copy属性创建对象的全新实例并递增其引用计数,使原始对象不受影响。< / p>

顺便说一句,您可以使用分配工具验证对象的引用计数。例如,请查看好answer以了解如何管理它。

答案 2 :(得分:0)

我从Apple自己的documentation找到了这个图像,只是如果color属性是一个强指针,那么它会增加保留计数,如果它是一个复制指针,那么它将创建一个带有保留计数的新对象1

memory_management