@propert的相关参数

因为现在Xcode都是默认使用ARC所以现在分析主要是以ARC为主。

1.@property有哪些参数?

第一组:

内存管理特性

retain  assign  copy  strong    weak     unsafe_unretained     autoreleasing

第二组:

读 /写特性

readwrite  readonly

第三组:

多线程特性

nonatomic  atomic

第四组:

方法名特性

setter  getter

2.参数分别有何作用?

①参数说明

第一组(retain  assign  copy   strong    weak     unsafe_unretained     autoreleasing)用于:set方法内存管理

assign(默认参数):setter方法直接赋值,不进行任何retain操作,不改变引用计数。该方法只会针对“纯量类型”(CGFloat或NSInteger等)和C数据类型(int, float, double, char, 等等)的简单赋值操作,id类型也要用assign,所以一般iOS中的代理delegate属性都会用assign来标示。

retain:生成符合内存管理的set方法(release旧值,retain新值),适用于OC对象的成员变量。

copy:生成符合内存管理的set方法(release旧值,copy新值),适用于NSString、NSArray等不可变对象。和strong类似,不过该属性会被复制一个新的副本。很多时使用copy是为了方式Mutable(可变类型)在我们不知道的情况下修改了属性值,而用copy可以生成一个不可变的副本防止被修改。如果我们自己实现setter方法的话,需要手动copy。

Strong:强引用,其存亡直接决定了所指向对象的存亡。使用该特性实例变量在赋值时,会释放旧值同时设置新值,对对象产生一个强引用,即引用计数+1。如果不存在指向一个对象的引用,并且此对象不再显示在列表中,则此对象会被从内存中释放。

weak:弱引用,不决定对象的存亡。属性表明了一种”非拥有关系“,既不释放旧值,也不保留新值,即引用计数不变,当指向的对象被释放时,该属性自动被设置为nil。即使一个对象被持有无数个弱引用,只要没有强引用指向它,那么还是会被清除。

unsafe_unretained:和weak一样,唯一的区别就是当对象被释放后,该属性不会被设置为nil。所以是unsafe的,详情请查看:浪天涯的博客

注意:

weak与Strong一般在开启ARC机制下使用

Strong:强引用,决定了对象的存亡(一个对象如果没有强指针指向(引用计数器为0)时,对象将被销毁,释放内存),其指向一个对象,相当于该对象做了一次retain操作。

非ARC的retain,相当于ARC的strong,弱引用相当于assign

使用copy参数与使用retain参数产生的set方法一致(将生成set方法中的retain改为copy即可)

第二组(readwrite  readonly)用于:是否要生成set方法

readwrite(默认参数):同时生成set、get方法的声明与实现

readonly:只生成get方法的声明与实现(不生成set的方法的声明与实现)

第三组(nonatomic  atomic)用于:多线程管理

atomic(默认参数):原子性,性能低(一般开发OC中的APP不推荐使用,做金融等高安全的时候使用)

nonatomic:非原子性,性能高(强烈推荐使用,性能高)

atomic:(原子性操作)就是一个操作执行过程不能被中断, 要不就执行完, 要不就不执行(一个操作不可以被中途cpu暂停然后调度)。如果一个操作是原子性的, 那么在多线程环境下, 就不会出现变量被修改等奇怪的问题(保证数据同步)。原子操作就是不可再分的操作,在多线程程序中原子操作是一个非常重要的概念,它常常用来实现一些同步机制,同时也是一些常见的多线程Bug的源头。

nonatomic:(非原子性操作)操作是直接从内存中取数值(不考虑其是否被占用),因为它是从内存中取得数据,它并没有一个加锁的保护来用于cpu中的寄存器计算Value,它只是单纯的从内存地址中,当前的内存存储的数据结果来进行使用。在多线程环境下可提高性能,但无法保证数据同步。

第四组(setter  getter)用于:set、get方法重命名(常用于BOOL类型的成员变量的get方法,BOOL方法常以is开头(set方法很少用))

setter:给成员变量的set方法重命名,set方法默认命名:- (void) set成员变量名(成员变量名首字母大写):(成员变量数据类型)成员变量名
getter:给成员变量的set方法重命名,get方法默认命名:- (成员变量数据类型) 成员变量名

iOS_ @property参数分析的更多相关文章

  1. http_load安装与测试参数分析 - 追求自由自在的编程 - ITeye技术网站

    http_load安装与测试参数分析 - 追求自由自在的编程 - ITeye技术网站 http_load -p 50 -s 120 urls

  2. cocos2dx tolua传递参数分析

    cocos2dx tolua传递参数分析: tolua_Cocos2d_CCNode_addChild00 == void CCNode::addChild(CCNode *child) tolua_ ...

  3. jQuery学习笔记之jQuery.fn.init()的参数分析

    这篇文章主要介绍了jQuery.fn.init()的参数分析,需要的朋友可以参考下   从return new jQuery.fn.init( selector, context, rootjQuer ...

  4. JavaScript事件监听以及addEventListener参数分析

    事件监听 在Javascript中事件的监听是用来对某些操作做出反应的方法.例如监听一个按钮的pressdown, 或者获取鼠标左键按下时候鼠标的位置.这些都需要使用监听来完成.监听的函数很简单:ad ...

  5. 七.OC基础加强--1.内存管理 2.野指针,内存泄露 3.set方法的内存管理 4.@property参数 5.@class和循环retain的使用 6.NSString的内存管理

    1,内存管理简单介绍 1,为什么要有内存管理? malloc selloc dealloc```需要回头复习 一般的内存 4s 是512m内存:6 是1024m内存: 当内存过大时,会耗尽内存.出现程 ...

  6. 1.ARC下是否有内存溢出等问题 2.@property参数 3.#import和@class的区别

    1.ARC下是否有内存溢出等问题? 答案:必须要担心啊,ARC也不是万能的.答案:必须要担心啊,ARC也不是万能的.这里主要是涉及到集合类的数据类型   比如数组,我们定义了一个可变数组muarr1, ...

  7. AI:IPPR的数学表示-CNN结构/参数分析

    前言:CNN迎接多类的挑战 特定类型的传统PR方法特征提取的方法是固定的,模式函数的形式是固定的,在理论上产生了特定的"局限性" 的,分类准确度可以使用PAC学习理论的方法计算出来 ...

  8. Jmeter5.1——聚合报告参数分析

    Jmeter5.1——聚合报告参数分析 Label: 每个JMeter的element的Name值.例如HTTP Request的Name. Samples:发出请求的数量.如果线程组中配置的是线程数 ...

  9. BMDP为常规的统计分析提供了大量的完备的函数系统,如:方差分析(ANOVA)、回归分析(Regression)、非参数分析(Nonparametric Analysis)、时间序列(Times Series)等等。此外,BMDP特别擅于进行出色的生存分析(Survival Analysis )。许多年来,一大批世界范围内顶级的统计学家都曾今参与过BMDP的开发工作。这不仅使得BMDP的权威性得到

        BMDP是Bio Medical Data Processing的缩写,是世界级的统计工具软件,至今已经有40多年的历史.目前在国际上与SAS.SPSS被并称为三大统计软件包.BMDP是一个大 ...

随机推荐

  1. JS中的== 、===的用法和区别。

    JS中的== .===的用法和区别.[转] == 和 != 比较若类型不同,先偿试转换类型,再作值比较,最后返回值比较结果 . 而  === 和 !== 只有在相同类型下,才会比较其值 ======= ...

  2. JSONP有什么作用

    1.解决跨域访问数据                 由于同源策略的限制,XmlHttpRequest只允许请求当前源(域名.协议.端口)的资源,为了实现跨域请求,可以通过script标签实现跨域请求 ...

  3. jQuery插件学习(一)

    由于项目开发需要,经常会用到一些jquery插件,但网上已有的插件常常又不能100%满足业务需求,所以就想自己能看懂插件的代码,进行一些功能上的改动和补充,或者能自己自定义插件就更好了.所以这段时间会 ...

  4. Android再学习-20141018-布局-进度条

    20141018-Android再学习 对齐至控件的基准线 为了保证印刷字母的整齐而划定的线(四线三格的第三条线). android:layout_alignBaseline 与父控件的四个边缘对齐( ...

  5. 【CCNA学习笔记】1.思科路由器的基本配置

    教学视频来源:http://edu.51cto.com/lesson/id-10930.html. 怎么安装模块.连交叉线什么的视频里面老师说的很清楚了,我只记录一下IOS配置的命令(虽然一副不明觉厉 ...

  6. NOR flash和NAND flash区别,RAM 和ROM区别d

    ROM和RAM指的都是半导体存储器,ROM是Read Only Memory的缩写,RAM是Random Access Memory的缩写.ROM在系统停止供电的时候仍然可以保持数据,而RAM通常都是 ...

  7. 用continue语句的时候,要千万小心内存泄漏,当然还有return和break也是

    疑惑了大半年的内存泄漏,居然是因为这个原因- 有空学学QT的指针使用,可以使得代码更简洁.更不容易内存泄漏-

  8. 符号化Symbol(符号)体系

    http://apps.hi.baidu.com/share/detail/23143648# 符号化Symbol(符号)体系 ArcGIS Engine9.3为开发人员提供了32种符号,主要分为三大 ...

  9. logstash 字段类型转换后 需要刷新

    filter { grok { match => [ "message" , "\s*%{IPORHOST:clientip}\s+\-\s+\-\s+\[%{HT ...

  10. 清除IE输入框眼睛和叉叉

    /* 清除IE输入框眼睛和叉叉 */::-ms-clear { display: none; } ::-ms-reveal { display: none; }