我读过几个问题,但我仍然感到困惑。我看了这个: Objective-C ARC: strong vs retain and weak vs assign以及其他一些问题
当我们说:someObject.color = customColor
我们是通过retain
增加customColor的引用计数还是通过copy
创建新对象?还是没有?
答案 0 :(得分:3)
该语句分配给一个属性,即在someObject的类上调用一个setter方法。那么,这将取决于该方法的实现方式。如果这是基于属性的自动生成的setter方法,则:如果它是copy
属性,则将在customColor上调用-copy方法;如果strong
则会保留(即增加引用次数),或者如果weak
或assign
则不会增加引用次数。
请注意,在某些不可变类上,-copy方法实现为只返回self,因此它就像一个retain - 它并不总是一个不同的对象引用。
答案 1 :(得分:1)
有三种可保留对象指针类型:
- 块指针(通过将插入符号(^)声明符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