iOS中 assign、copy、retain、strong,weak,

assign:对基础数据类型 (NSInteger,CGFloat)和C数据类型(int, float, double, char)等。简单赋值,不更改索引计数

retain:NSObject和其子类对参数进行   release旧值,再retain新值,引用计数器➕1 

weak 只可以修饰对象,修饰的对象在释放之后,指针地址会被置为nil。所以现在一般弱引用就是用weak。在 set 方法中 ARC 系统不会调用 引用计数器相关的 代码执行, 只是简单的赋值而已,所以其引用计数器不会改变。其为OC对象。

assign  简单赋值,不更改索引计数,可修饰对象,和基本数据类型,如果修饰对象,会产生野指针问题;如果修饰基本数据类型则是安全的。修饰的对象释放后,指针不会自动被置空,此时向对象发消息会崩溃。在 set 方法中 ARC 系统不会调用 引用计数器相关的 代码执行, 只是简单的赋值而已,计数器不会改变。其为非OC对象

iOS中 assign、copy、retain、strong,weak,_第1张图片

浅拷贝:将对象的内存地址进行拷贝,不会生成一份新的内存地址。其生成对象与原有对象会公用同一份内存地址 但是它不会改变引用计数器 只会让此内存保持原有引用计数,其所指向的内容是一致的。

深拷贝:将对象的内存地址所指向内容进行拷贝,生成一份新的内存地址指向这份拷贝出来的内容。其生成对象与原有对象分别使用不同的地址,所指向的内容也不一致,其所指向的内容应该是拷贝出来的另一份全新内容。

strong: 在 set 方法中 ARC 系统会自动帮我们加入对 新值 retain 使其引用计数器 + 1 的代码, 并且对旧 值进行 release 使其引用计数器 - 1 的代码。

你可能感兴趣的:(iOS中 assign、copy、retain、strong,weak,)