属性关键字的作用

现在我们iOS开发中,基本都是使用ARC(自动引用计数)技术,来编写我们的代码。因此在属性property中我们经常使用的关键字有strong,weak,assign,copy,nonatomic,atomic,readonly,readwrite,getter,setter。可能经常写代码的朋友,已经很清楚在什么情况下会使用他们。但可能并不清楚他们的含义,下面我先通过一张表总结下他们的作用:

属性关键字的作用

属性关键字

对属性的作用

strong

释放旧对象 将旧对象的值赋予输入对象 ,再提高输入对象的索引计数为 1 ,常使用在继承自 NSObject 的类。

weak

weak 不增加对对象的引用计数,也不持有对象,因此不能决定对象的释放。它比 assign 多了一个功能,当对象消失后自动把指针变成 nil

assign

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

copy

建立一个索引计数为 1 的对象 然后释放旧对象   对 NSString 它指出 ,在赋值时使用传入值的一份拷贝 ,拷贝工作由 copy 方法执行,此属性只对那些实行了 NSCopying 协议的对象类型有效。

atomic

和 nonatomic 用来决定编译器生成的 getter 和 setter 是否为原子操作 , atomic 设置成员变量的 @property 属性时   默认为是 atomic 提供线程安全 。在多线程环境下 ,原子操作是必要的 否则会引起错误的结果 。

nonatomic

非原子性访问 对于属性赋值的时候不加锁 ,多线程并发访问会提高性能,如果不加此属性 则默认是两个访问方法都为原子型事务访问。

readonly

此标记说明属性是只读的

readwrite

此标记说明属性会被当成读写的   这也是默认的属性

unsafe_unretained

跟 weak 类似,声明一个弱引用,但是当引用计数为 0 时,变量不会自动设置为 nil

getter

指定 get 方法,并需要实现这个方法 。必须返回与声明类型相同的变量,没有参数

setter

指定 set 方法,并需要实现这个方法 。带一个与声明类型相同的参数,没有返回值(返回空值)

当声明为 readonly 的时候,不能指定 set 方法

iOS中常用属性的关键字的使用说明的更多相关文章

  1. iOS中常用的四种数据持久化方法简介

    iOS中常用的四种数据持久化方法简介 iOS中的数据持久化方式,基本上有以下四种:属性列表.对象归档.SQLite3和Core Data 1.属性列表涉及到的主要类:NSUserDefaults,一般 ...

  2. ios中常用数据类型相互转换

    ios中常用数据类型相互转换 //1. NSMutableArray和NSArray互转 // NSArray转为NSMutableArray NSMutableArray *arrM = [arr ...

  3. iOS 中 常用的第三方库

    现在对于我们 iOS 开发来说,基本上说不可能不使用第三方轮子啦,毕竟没那么多时间,而且自己造的轮子往往想着成为上图中的最后一个,结果却成了上图中第二个或第一个啦,当然大公司另当别论.下面我从之前用过 ...

  4. 零基础学习java------36---------xml,MyBatis,入门程序,CURD练习(#{}和${}区别,模糊查询,添加本地约束文件) 全局配置文件中常用属性 动态Sql(掌握)

    一. xml  1. 文档的声明 2. 文档的约束,规定了当前文件中有的标签(属性),并且规定了标签层级关系 其叫html文档而言,语法要求更严格,标签成对出现(不是的话会报错) 3. 作用:数据格式 ...

  5. iOS 中 const static extern 关键字总结

    在看一些高手所写的代码时,总是可以看到我们小白平常不用的关键字,一次,两次,三次,不能总是不明不白,现在总结一下日常开发中常用的关键字的作用: 关键字const/static/extern的释义和用法 ...

  6. iOS中常用的四种数据持久化技术

    iOS中的数据持久化方式,基本上有以下四种:属性列表 对象归档 SQLite3和Core Data 1.属性列表涉及到的主要类:NSUserDefaults,一般 [NSUserDefaults st ...

  7. Jasper_mainReport_excel html pdf 主报表中常用属性

    jasper中,excel , html, pdf 一般可以使用相同的主报表和子报表.需要在主报表中添加不同格式对应的属性.导出不同格式的报表,编译器会将相应的属性应用到对应的报表格式中. 常用属性如 ...

  8. iOS中常用的手势

    --前言 智能手机问世后的很长一段时间,各大手机厂商都在思考着智能手机应该怎么玩?也都在尝试着制定自己的一套操作方式.直到2007年乔布斯发布了iPhone手机,人们才认识到智能手机就应该这样玩. 真 ...

  9. iOS中代理属性为什么要用Weak修饰?

    一.写在前面 代理设计模式,在iOS开发过程中,是一个非常常见的设计模式,可以说用的范围非常广泛,而对初学者来讲,常常对代理的属性修饰用weak存在疑惑,因此下面就解释一下其中非常简单的道理. 二.必 ...

随机推荐

  1. [python]获取当前年月

    import time time.strftime('%Y%m',time.localtime(time.time()))#获取当前年月

  2. 学习大神笔记之“MyBatis学习总结(三)”

    一.连接数据库的配置单独放在一个properties文件中          创建db.peoperties----保存数据库配置信息      driver=com.mysql.jdbc.Drive ...

  3. HDU 4622 Reincarnation (查询一段字符串的不同子串个数,后缀自动机)

    Reincarnation Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others)To ...

  4. 【2016-10-17】【坚持学习】【Day8】【工厂方法模式】

    工厂方法模式又叫工厂模式,虚拟构造器模式 定义: 工厂父类负责定义创建产品对象的公共接口,而工厂子类则负责生成具体的产品对象目的是将产品类的实例化操作延迟到工厂子类中完成,即通过工厂子类来确定究竟应该 ...

  5. JPA中entityManager的CRUD

    private EntityManagerFactory entityManagerFactory; private EntityManager entityManager; private Enti ...

  6. C++与C# UDP通信实例(同一台PC)

    对于同一个PC机而言,服务器端和客户端在一个PC机上面,端口必须要不一样,不然会冲突. 你总不能自己又当爹又当妈吧. 所以在进行程序设计的时候,需要考虑这一点: 在此接口设计中,C++当作UDP的服务 ...

  7. IO(七)----转换流

    输入字节流的转换流:InputStreamReader 是字节流通向字符流的桥梁. 输出字节流的转换流:OutputStreamWriter  可以把输出字节流转换成输出字符流 .  是符流通向字节流 ...

  8. Ext小总结

    titleCollapse:true,//高级搜索点击隐藏显示 添加按钮 >弹出页面 1.添加按钮 //核销  在控制层页面添加页面路径>添加操作按钮>window.allOrder ...

  9. Vue2.0学习笔记一 :各种表达式

    #,过滤器 #,在Vue2.x中,过滤器只能在mustache绑定中使用,为了在指令帮定中实现同样的行为,你应该使用计算属性:     #,过滤器可以串联 {{ message | filterA | ...

  10. 备忘:maven 中指定版本

    <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> ...