我们在这里增加引用计数吗?
Are we increasing the reference count here?
我看了好几个问题,但还是一头雾水。我读到这个:
Objective-C ARC: strong vs retain and weak vs assign 和其他一些问题
当我们说:someObject.color = customColor
我们是通过 retain
ing 增加 customColor 的引用计数,还是通过 copy
ing 创建一个新对象?或者 none?
该语句正在分配给 属性,即在 someObject 的 class 上调用 setter 方法。因此,这将取决于该方法的实现方式。如果那是一个基于 属性 的自动生成的 setter 方法,那么: 如果它是一个 copy
属性,将在 customColor 上调用 -copy 方法;如果 strong
那么它将被保留(即增加引用计数),或者如果 weak
或 assign
那么它不会增加引用计数。
请注意,在一些不可变的 classes 上,-copy 方法只实现到 return self,因此它就像一个保留——它并不总是一个不同的对象参考。
如 official documentation 所述:
There are three kinds of retainable object pointer types:
- block pointers (formed by applying the caret (^) declarator sigil to a function type)
- Objective-C object pointers (id, Class, NSFoo*, etc.)
- typedefs marked with attribute((NSObject))
当我们处理 Objective-C 对象指针(位模式指示指向对象的位置)时,代码如下:
UIColor *color1 = [UIColor whiteColor];
// Increase reference count of color1 by 1, without copying it.
UIColor *color2 = color1;
在赋值过程中,对象没有被复制,但它们的引用被复制(引用计数增加)。
关于你的情况,如其他评论所述,它取决于 属性 属性:copy
属性创建对象的全新实例并增加其引用计数,留下原始对象不受影响。
顺便说一句,您可以使用 Allocations Instrument 验证对象的引用计数。例如,查看这个不错的 answer 以了解如何管理它。
我从 Apple 自己的 documentation 中找到这张图片,如果颜色 属性 是一个强指针那么它会增加保留计数,如果它是一个复制指针那么它会创建一个保留计数为 1
的新对象
我看了好几个问题,但还是一头雾水。我读到这个: Objective-C ARC: strong vs retain and weak vs assign 和其他一些问题
当我们说:someObject.color = customColor
我们是通过 retain
ing 增加 customColor 的引用计数,还是通过 copy
ing 创建一个新对象?或者 none?
该语句正在分配给 属性,即在 someObject 的 class 上调用 setter 方法。因此,这将取决于该方法的实现方式。如果那是一个基于 属性 的自动生成的 setter 方法,那么: 如果它是一个 copy
属性,将在 customColor 上调用 -copy 方法;如果 strong
那么它将被保留(即增加引用计数),或者如果 weak
或 assign
那么它不会增加引用计数。
请注意,在一些不可变的 classes 上,-copy 方法只实现到 return self,因此它就像一个保留——它并不总是一个不同的对象参考。
如 official documentation 所述:
There are three kinds of retainable object pointer types:
- block pointers (formed by applying the caret (^) declarator sigil to a function type)
- Objective-C object pointers (id, Class, NSFoo*, etc.)
- typedefs marked with attribute((NSObject))
当我们处理 Objective-C 对象指针(位模式指示指向对象的位置)时,代码如下:
UIColor *color1 = [UIColor whiteColor];
// Increase reference count of color1 by 1, without copying it.
UIColor *color2 = color1;
在赋值过程中,对象没有被复制,但它们的引用被复制(引用计数增加)。
关于你的情况,如其他评论所述,它取决于 属性 属性:copy
属性创建对象的全新实例并增加其引用计数,留下原始对象不受影响。
顺便说一句,您可以使用 Allocations Instrument 验证对象的引用计数。例如,查看这个不错的 answer 以了解如何管理它。
我从 Apple 自己的 documentation 中找到这张图片,如果颜色 属性 是一个强指针那么它会增加保留计数,如果它是一个复制指针那么它会创建一个保留计数为 1
的新对象