assign/retain/copy

Objective-C中有两类对象,一类是结构体(或者基本数据类型也算),另一类是NSObject对象。

  • 对于结构体,代码直接会操作其实体,因此赋值操作会创建一个源对象的副本(一个新的对象);
  • 对于NSObject对象,必须使用指针来操作对象,所以其赋值操作相当于复制了指针,而非对象,也就是说赋值操作使得源指针和新指针都指向同一个NSObject对象。这样讲有些难以理解,请看下面的代码:

assign:###

简单赋值给新对象,不增加引用计数。也就是说,

  • 当在结构体(或者基本数据类型也算)的时候,是创造一个就对象的副本;
  • 当在NSObject对象的时候,会把对象的指针赋值。
- (void) setAssignProperty:(id)newValue
{
    self->assignProperty = newValue;
}

一般用在:

**基本数据类型\int \float \double\CGRect \真假(BOOL)\结构体**

retain:###

释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1。也就是说,

  • 当在NSObject对象的时候,会把旧对象的计数- 1,然后把输入对象的指针赋值给目标,然后新对象的计数+1。
-(void)setRetainProperty:(id)newValue
{
    if (retainProperty != newvalue)
    {
        [retainProperty release];
        retainProperty = [newValue retain];
    }
}

一般用在:

一般对象如:NSNumber(除了NSTring 对象外)

copy:###

释放旧对象,建立一个索引计数为1的对象。也就是说,

  • 当在NSObject对象的时候,会把旧对象的计数- 1,把输入对象的值和内容拷贝成副本(也就是有新的指针,新的一样的内容),把副本赋值给目标,计数+1。
-(void)setCopyProperty:(id)newValue
{
    if (copyProperty != newvalue)
    {
        [copyProperty release];
        copyProperty = [newValue copy];
    }
}

一般用在:

NSString、NSMutableString、block
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容