黑马程序猿-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

原文地址:https://www.cnblogs.com/zhchoutai/p/8282405.html

时间: 2024-10-31 13:00:16

黑马程序猿-assign、retain、release、nonatomic、atomic、strong、weak的相关文章

黑马程序猿——25,打印流,合并流,对象序列化,管道流,RandomAccessFile

------<ahref="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------- 黑马程序猿--25.打印流.合并流.对象序列化,管道流,RandomAccessFile /* IO流的打印流:专门用于打印的流 字节打印流PrintStream PrintStream的构造函数能够接收file对象,String型字符串路

黑马程序猿-面向对象-多态

---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Unity开发</a>.<a href="http://edu.csdn.net"target="blank">.Net培训</a>.期待与您交流! ---------------------- 一多态的前提:(1)要有继承关系(或

飞鸽传书官方站点 创立黑马程序猿训练营

张孝祥于2001年创办锐信科技有限公司,2005年创办传智播客科技有限公司,飞鸽传书官方站点 创立黑马程序猿训练营,一直致力于陶瓷的飞鸽传书软件开发教育事业,张孝祥老师善于解剖和分析问题,善于使用生动形象的比喻,能将复杂的.难于理解的问题与知识简单化解说,其人生格言是为千万人少走弯路而著书.为中华软件之崛起而讲课,从锐信科技到传智播客,十几年来,张孝祥一直在践行着这一格言,亲身培养了上万名优秀的软件开发者. 这个理由也许为很多人不耻,但确实是依据自己的飞鸽传书情况来选的.要知道这么多年没踫过数学

黑马程序猿——26,基本数据操作流,字节数组操作流,转换流,编码表

-----------android培训.java培训.java学习型技术博客.期待与您交流! ------------ 黑马程序猿--26, DataInputStream,DataOutputStream, ByteArrayInputStream,ByteArrayOutputStream, InputStreamReader,OutputStreamWriter,编码表 /* DataInputStream和DataOutputStream 能够更加操作基本数据类型的流 注意这里是Dat

黑马程序猿_反射、内省、泛型

------- android培训.java培训.期待与您交流! ---------- 反射:  反射就是把Java类中的各种成分映射成对应的java类. 构造方法的反射: onstructor类代表某个类中的一个构造方法. 得到某个类全部的构造方法: Constructor [] constructors=Class.forName("java.lang.String").getConstructors(); 得到某一个构造方法: Constructorconstructor=Cla

IOS-4-面试题1:黑马程序猿IOS面试题大全

一.多线程网络 1. 多线程的底层实现? 1> 首先搞清楚什么是线程.什么是多线程 2> Mach是第一个以多线程方式处理任务的系统.因此多线程的底层实现机制是基于Mach的线程 3> 开发中非常少用Mach级的线程,由于Mach级的线程没有提供多线程的基本特征,线程之间是独立的 4> 开发中实现多线程的方案 l C语言的POSIX接口:#include <pthread.h> l OC的NSThread l C语言的GCD接口(性能最好.代码更精简) l OC的NSO

黑马程序猿-单例模式

单例设计模式 单例模式是一种经常使用的软件设计模式.在它的核心结构中仅仅包括一个被称为单例类的特殊类. 通过单例模式能够保证系统中一个类仅仅有一个实例并且该实例易于外界訪问.从而方便对实例个数的控制并节约系统资源.假设希望在系统中某个类的对象仅仅能存在一个,单例模式是最好的解决方式.显然单例模式的要点有三个:一是某个类仅仅能有一个实例:二是它必须自行创建这个实例:三是它必须自行向整个系统提供这个实例. 解决的问题:保证一个类在内存中的对象唯一性. 比方:多程序读取一个配置文件时,建议配置文件封装

黑马程序猿——JAVA基础——集合

----------android培训.java培训.java学习型技术博客.期待与您交流.------------ 一.关于java中的集合类 首先看一下,大致的框架流程图 通过这些我们能够看出来,通常我们常常採用的vector.arraylist.hashset.treeset,hashmap.hashtable,treemap.linkedlist类 关于vector和arraylist对照,vector是线程安全的,vector通过遍历.性能更高. ArrayList和Vector功能类

黑马程序猿——JAVA高新技术——反射

----------android培训.java培训.java学习型技术博客.期待与您交流!------------ 一.对于反射的概念 对于JAVA反射机制是在执行状态中,对于随意一个类.都可以知道这个类的全部属性和方法:对于随意一个对象.都可以调用它的随意一个方法和属性:这样的动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制. JAVA反射(放射)机制:"程序执行时,同意改变程序结构或变量类型,这样的语言称为动态语言".从这个观点看,Perl,Python,Ru