assign、retain、release、nonatomic、atomic、strong、weak

都是用于修饰@property声明的变量

assign:用于非oc对象类型,表示直接赋值(默认值)

retain:用于mrc中,用于类属性中有oc对象的情况,表示先判断赋值的对象是否和实例对象变量的值相等,

若不相等则先retain在赋值。(即release旧值,retain新值,用于修饰对象)

release:用于mrc中,将对象的引用计数减1

atomic:用于多线程,保证原子性,效率低(默认)

nonatomic:修饰不需要多线程的属性,效率高

strong:用于arc中,强指针,用于修饰oc对象,当类属性中有对象时用其修饰。相当于mrc中的retain

weak:用于arc中,弱指针,一般用于修饰UI控件。当其指向的对象被释放时,会将该对象指针的值置为nil。

不能用__weak直接修饰一个对象指针变量,因为用其修饰后,对象以创建就要被释放

范例:

__weak Person * p1 = [Person new]; //报警告,对象没有强指针指向,一创建就要被释放

copy:用于修饰NSString和block类型的成员变量,是浅复制,不会申请新的内存空间。release旧值copy

新值

mutableCopy:用于修饰NSString和block类型的成员变量,是深复制,会重新申请一块内存空间。

mrc内存管理原则:谁创建谁release ,谁retain谁release

arc内存管理原则:当一个对象没有强指针指向时,该对象就被立即释放,arc中不能调用[super dealloc]

对象的循环引用的解决方法:人拥有一条狗,狗又有一个主人,这就是对象的循环引用

mrc中:一端用retain,一端用assign;retain端要在dealloc方法中先release该类的对象属性

arc中:一端用strong,一端用weak

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-07 16:18:16

assign、retain、release、nonatomic、atomic、strong、weak的相关文章

属性readwrite,readonly,assign,retain,copy,nonatomic

copy:建立一个索引计数为1的对象,然后释放旧对象 对NSString对NSString 它指出,在赋值时使用传入值的一份拷贝.拷贝工作由copy方法执行,此属性只对那些实行了NSCopying协议的对象类型有效.更深入的讨论,请参考“复制”部分. retain:释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1对其他NSObject和其子类对参数进行release旧值,再retain新值指定retain会在赋值时唤醒传入值的retain消息.此属性只能用于Objective

OC中属性readwrite,readonly,assign,retain,copy,nonatomic 各是什么作用,在那种情况下用?

此次只做简单说明,不做代码演示! 1> readwrite:同时生成get方法和set方法的声明和实现 2> readonly:只生成get方法的声明和实现 3> assign:set方法的实现是直接赋值,用于基本数据类型 4> retain:set方法的实现是release旧值,retain新值,用于OC对象类型 5> copy:set方法的实现是release旧值,copy新值,用于NSString.block等类型 6> nonatomic:非原子性,set方法的

属性readwrite,readonly,assign,retain,copy,nonatomic 各是什么作用,在哪种情况下用?

readwrite:是可读可写的特性:需要生成getter和setter方法的时候用到: readonly:只读特性,只生成getter方法:不想在类外修改该属性的时候用到: assign:赋值特性,setter方法将传入参数赋值给实例变量:仅在设置变量时使用: retain:持有特性,setter方法将传入参数先保留,再赋值,传入参数的retainCount会+1: copy:赋值特性,setter方法将传入参数先复制一份,再赋值:当需要一份新的变量时用到: nonatomic:非原子操作,决

object-c中的assign,retain,copy,atomic,nonatomic,readonly,readwrite以及strong,weak

assign:指定setter方法用简单的赋值,这是默认操作.你可以对标量类型(如int)使用这个属性.你可以想象一个float,它不是一个对象,所以它不能retain.copy.assign指定setter方法用简单的赋值,这是默认操作.你可以对标量类型(如int)使用这个属性.你可以想象一个float,它不是一个对象,所以它不能retain.copy. retain:指定retain应该在后面的对象上调用,前一个值发送一条release消息.你可以想象一个NSString实例,它是一个对象,

IOS开发 strong,weak,retain,assign,copy nomatic 等的区别与作用

strong,weak,retain,assign,copy nomatic 等的区别 copy与retain:1.copy其实是建立了一个相同的对象,而retain不是:2.copy是内容拷贝,retain是指针拷贝:  3.copy是内容的拷贝 ,对于像NSString,的确是这样,但是如果copy的是一个NSArray呢?这时只是copy了指向array中相对应元素的指针.这便是所谓的"浅复制".4.copy的情况:NSString *newPt = [pt copy];此时会在

黑马程序猿-assign、retain、release、nonatomic、atomic、strong、weak

都是用于修饰@property声明的变量 assign:用于非oc对象类型,表示直接赋值(默认值) retain:用于mrc中,用于类属性中有oc对象的情况,表示先推断赋值的对象是否和实例对象变量的值相等. ? ? ? ? ? ? ? ? 若不相等则先retain在赋值. (即release旧值,retain新值,用于修饰对象) release:用于mrc中.将对象的引用计数减1 atomic:用于多线程,保证原子性,效率低(默认) nonatomic:修饰不须要多线程的属性,效率高 stron

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

assign: 简单赋值,不更改索引计数copy: 建立一个索引计数为1的对象,然后释放旧对象 retain:释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1 Copy其实是建立了一个相同的对象,而retain不是:比如一个NSString对象,地址为0×1111,内容为@"STR" Copy到另外一个NSString之 后,地址为0×2222,内容相同,新的对象retain为1, 旧有对象没有变化 retain到另外一个NSString之 后,地址相同(建立一个指

iOS开发-assign、retain、copy、strong、weak的区别

对于初学的开发者,对于assign.retain.copy.strong.weak的用法及意义可能不是很明白,我对于这个问题也研究了很久,写篇博文,巧巧代码,让我们来瞧瞧吧! 先定义一个Student类: #import <Foundation/Foundation.h> @interface Student : NSObject @property (nonatomic, copy) NSString *name; @end 然后先是mrc下的assign声明 @property (nona

ios assign、copy 、retain

assign: 简单赋值,不更改索引计数(Reference Counting). copy: 建立一个索引计数为1的对象,然后释放旧对象 retain:释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1 使用assign: 对基础数据类型 (NSInteger,CGFloat)和C数据类型(int, float, double,         char, 等等) 使用copy: 对NSString 使用retain: 对其他NSObject和其子类 nonatomic,非原