使用Objective-C对象时,
assign创建从一个对象到另一个对象的引用,而不增加源的保留计数.
retain创建从一个对象到另一个对象的引用,并增加源对象的保留计数.
aColor是源对象.假设它的保留计数为400.
-(void) changeColor:(UIColor *)aColor
{
UIColor *alpha = aColor; // aColor retain count = 400 still
UIColor *beta = [aColor retain]; // aColor retain count now 401
}
Run Code Online (Sandbox Code Playgroud)
alpha和beta都是对象aColor的引用.alpha的简单分配不会以任何方式影响源对象.alpha只是另一个指向aColor的指针.
beta仍然只是另一个指向aColor的指针,但是-retain还有将其保留计数增加1的额外效果.
当您声明要使用retain的属性时,
@property (retain) UIColor *color;
Run Code Online (Sandbox Code Playgroud)
编译器将生成一个set访问器,将参数值分配给ivar并保留source参数.实质上,
-(void)setColor:(UIColor *)aColor
{
...
color = [aColor retain];
}
Run Code Online (Sandbox Code Playgroud)
声明属性以使用assign时,
@property (assign) UIColor *color;
Run Code Online (Sandbox Code Playgroud)
你得到了ivar赋值,而没有对source参数进行任何修改.
-(void)setColor:(UIColor *)aColor
{
...
color = aColor;
}
Run Code Online (Sandbox Code Playgroud)
Retain 告诉编译器向我们分配给属性的任何对象发送保留消息。这使得实例变量在使用时保持活动状态(而不是释放它)。
分配旨在与低级 C 数据类型或垃圾收集一起使用。GC 也不属于 iOS 的任何功能。
| 归档时间: |
|
| 查看次数: |
3464 次 |
| 最近记录: |