[Objective-C] assign/retain/copy 详解

转载 2015年07月07日 08:22:05

转自:http://www.88cto.com/996655/article/details/21674.html


注意:assign 是默认值


1.assign:这个属性一般用来处理基础类型,比如int、float等等,如果你声明的属性是基础类型的话,assign是默认的,你可以不加这个属性!(一个常见的例外是delegate的set方法通常设为assign,这是为了避免循环引用造成的引用计数无法归0,然后内存泄漏——考虑一个view的delegate为该view所在controller的情况)

2.retain: 释放旧的对象 将旧对象的值赋予输入对象 并将输入对象的索引计数+1 ,主要应用与NSObject与其子类中.具体实现如下:Book类创建一个对象

【yasi】释放旧的对象_book,将输入对象book的值赋予旧的对象_book,并将输入对象book的索引计数+1 ,主要应用于NSObject与其子类中

- (void)setBook:(Book *)book{ 
    if (_book != book) {
        [_book release]; // 释放掉旧的_book不用担心开始_book = nil时候,释放 [nil release]在OC中不算错误没有空指针概念
       _book = [book retain];     //  book赋值给新的_book
    }
}

- (Book*)book{
    return _book;
}

3.copy:这个会自动生成你赋值对象的克隆,相当于在内存中新生成了该对象的副本,这样一来,改变赋值对象就不会改变你声明的这个成员变量了一般推荐的做法是NSString类型用copy

OC中assign、copy 、retain等关键字的含义

assign: 简单赋值,不更改索引计数 copy: 建立一个索引计数为1的对象,然后释放旧对象 retain:释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1 Copy...
  • Damon_hoo
  • Damon_hoo
  • 2014年09月04日 17:43
  • 1089

IOS开发 @property中assign、copy 、retain等关键字的理解

一、@property基本作用 @property(nonatomic,retain)NSString *str; @property关键字提供了外界对成员变量的访问接口,其本质是为某一个...
  • muzhenhua
  • muzhenhua
  • 2015年05月06日 13:07
  • 1149

Objective C 高级进阶—属性assign, copy, retain内存分析

最近浏览某些博客文章或者论坛,发现有些人还是对OC的一些属性理解不是很清楚,或者博客里讲解的不深入,以至于大家只是表面上理解了,深层次的还是没有理解,下次用的时候还是不知道如何去使用这些属性,这里给大...
  • O_surface_O
  • O_surface_O
  • 2013年06月28日 13:06
  • 1784

Objective-C的@property 详解(ios,iphone,xcode,retain,release,assign,copy)

学过c/c++的朋友都知道,我们定义struct/class的时候,如果把访问限定符(public,protected,private)设置为public的话,那么我们是可以直接用.号来访问它内部的数...
  • helen0713
  • helen0713
  • 2014年10月21日 12:56
  • 401

Objective-C学习——copy, retain,assign,readonly,readwrite,strong,weak,nonatomic,unsafe_unretained

说明:看了很多书上的描述,对retain assign和copy的都是草草描述,没有谈及本质,但是retain assign和copy却是内存管理的重要内容,所以自己总结了下,本文涉及到了Object...
  • yi412
  • yi412
  • 2016年05月20日 11:31
  • 526

Objective-C ---- retain/copy/assign/等语义修饰理解

【atomic/nonatomic】 (1)atomic[默认属性]:OC使用的一种线程保护技术,是防止在写未完成的时候被另外一个线程读取,造成数据错误。而这种机制是耗费系统资源的,所以在iPhon...
  • sinat_30162391
  • sinat_30162391
  • 2016年02月15日 10:27
  • 716

Objective-c中copy,retain,assign,readonly,read write,nonatomic的区别

nonatomic:非原子性访问,对属性赋值的时候不加锁,多线程并发访问会提高性能。如果不加此属性,则默认是两个访问方法都为原子型事务访问。 (atomic是Objc使用的一种线程保护技术,基本...
  • yqmfly
  • yqmfly
  • 2012年06月18日 14:57
  • 821

Objective-C中的@property和@synthesize用法及参数(readwrite/readonly)(assign/retain/copy)(atomicity/nonatomic)

用@property,@synthesize来代替get,set方法,用起来很简单,可以省掉很多的代码量,当需要用SET,GET方法的地方,我们可以用@property,@synthesize来简单的...
  • X_i_a_o_H_a_i
  • X_i_a_o_H_a_i
  • 2016年08月15日 16:31
  • 355

Objective-C 属性特性(assign , retain , copy , readonly , readwrite , atomic , nonatomic)

assign:指定setter方法用简单的赋值,这是默认操作。你可以对标量类型(如int)使用这个属性。你可以想象一个float,它不是一个对象,所以它不能retain、copy。   assign:...
  • gloryFlow
  • gloryFlow
  • 2012年11月20日 15:20
  • 331

Objective-C中类属性的 copy, retain, assign , readonly , readwrite, nonatomic区别

Objective-C中类属性的 copy, retain, assign , readonly , readwrite, nonatomic区别   nonatomic:非原子性访问,对属性赋...
  • lxlzy
  • lxlzy
  • 2015年11月14日 15:27
  • 218
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[Objective-C] assign/retain/copy 详解
举报原因:
原因补充:

(最多只允许输入30个字)