这个要根据语境来判断吧。一般来说property的setter不应该是assign的,除非是poco的对象。 POCO=plain old c object.就是指原始类型、结构体、枚举、联合体等c支持的类型。反正就是又平又老,乏味的玩意了。
有人又要问了nonatomic是什么,原子性,这个是在数据库设计里面的一个概念,原子不能在分。
assing是为了防止交叉引用..比如..有3个类....A..B..C.. 我在A里面..创建B...B里面有创建C....并设定C的delegate=self(也就是B).. 如果C里面的delegate是retain...那么B的retain就会是+2(A类创建时+1) 这时候..如果我在A里面release了B...那么B的retain就不会是0(因为C的delegate是retain的)... 也就是说B永远不会被释放掉..就会释放不了..
其实在ios5里面,unsafe_unretaind就描述了,很清楚了,
如果清楚多线程里面的,对象同一时间进行访问,和修改,提交的时候,表现出了问题。
举个例子,来说明下assing和retain。
设你用malloc分配了一块内存,并且把它的地址赋值给了指针a,后来你希望指针b也共享这块内存,于是你又把a赋值给(assign)了b。此时a和b指向同一块内存,请问当a不再需要这块内存,能否直接释放它?答案是否定的,因为a并不知道b是否还在使用这块内存,如果a释放了,那么b在使用这块内存的时候会引起程序crash掉。
了解到assign的问题,那么如何解决?最简单的一个方法就是使用引用计数(reference counting),还是上面的那个例子,我们给那块内存设一个引用计数,当内存被分配并且赋值给a时,引用计数是1。当把a赋值给b时引用计数增加到2。这时如果a不再使用这块内存,它只需要把引用计数减1,表明自己不再拥有这块内存。b不再使用这块内存时也把引用计数减1。当引用计数变为0的时候,代表该内存不再被任何指针所引用,系统可以把它直接释放掉。
而copy是在你不希望a和b共享一块内存时会使用到。a和b各自有自己的内存。
凌乱的总结描述
- * assign: 简单赋值,不更改索引计数(Reference Counting)。
- * copy: 建立一个索引计数为1的对象,然后释放旧对象
- * retain:释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1
- * 使用assign: 对基础数据类型 (NSInteger)和C数据类型(int, float, double, char,等)
- * 使用copy: 对NSString
- * 使用retain: 对其他NSObject和其子类
copy是创建一个新对象,retain是创建一个指针,引用对象计数加1。
1.readonly表示这个属性是只读的,就是只生成getter方法,不会生成setter方法.
2.readwrite,设置可供访问级别
3.retain,是说明该属性在赋值的时候,先release之前的值,然后再赋新值给属性,引用再加1。
4.nonatomic,非原子性访问,不加同步,多线程并发访问会提高性能。先释放原先变量,再将新变量retaii然后赋值;
注意,如果不加此属性,则默认是两个访问方法都为原子型事务访问。
|
相关推荐
一组不断发展的 JSON 文件,描述了 iOS 设备的所有特性和功能。 ##1。 介绍 该存储库是一项协作工作,旨在编纂 iOS 设备的所有特性,以便信息系统和应用程序轻松使用它们。 ##2。 存储库布局 / /README.md ...
本文内容会持续不断地更新并维护,如果您有推荐的资源,请到此处。 移动开发姊妹篇,请到这里。 移动开发姊妹篇,请到这里。 iOS官方相关技术站点 站点名称 站点地址 站点介绍 这其中包括人机交互指南,自适应的用户...
随着智能手机市场的不断扩大和移动互联网的快速发展,iOS开发成为越来越多开发者的职业选择。iOS平台因其优秀的用户体验、丰富的功能特性和广泛的应用场景而备受瞩目。掌握iOS开发技术,不仅能够开发出具有创新性和...
swift最新中文文档 不定时更新 Swift 是一种新的编程语言,用于编写 iOS 和 OS...用 Swift 编写 iOS 和 OS X 应用将是一场美妙的体验,Swift 之后也会不断开发新特性和兼容性。我们对 Swift 充满信心,你还在等什么!
iOS开发:适配iOS10以及Xcode8 现在在苹果的官网上,我们...用Xcode8打开工程后,比较明显的就是下图了,这个是苹果的新特性,可以帮助我们自动管理证书。建议大家勾选这个Automatically manage signing(Ps.但是在b
不断更新中...... 20170607:本次功能变更:增加书架删除,缓存,修复一些缺陷 20170612: 本次功能变更:增加开屏广告,增加首次安装新特性,推荐书籍等 20170808:本次功能变更:充分利用Swift语言特性,整合API,...
Cisco IOS XR 软件是一种独特的自治愈和自防御操作系统,它不但支持全天候运营,还能不断扩容和添加新服务或新特性。利用分布式处理智能以及强有力的服务质量(QoS)和组播机制,Cisco XR 12000系列能够帮助电信运营...
渐进增强 一开始只构建站点的最少特性,然后不断针对各浏览器追加功能。先让网站能够正常工作于尽可能旧的浏览器上,然后不断为它在新型浏览器上实现更多的增强和改进。 Viewport 移动设备上的Viewport就是设备的...
考虑到之前CI方面的体验,以及我们的iOS开发者提出的各种需求,我们对这种服务器的要求是必须能够:构建并签署我们的所有不同特性的应用;将我们的应用商店首选项上传至iTunesConnect;将IPA、dSYM,以及变更日志...
一个集成简单、高效、轻量级、持续更新的第三方图片选择框架 特性 支持选择图片(普通图片,GIF格式图片等) 支持选择LivePhoto 支持选择Video 支持3D Touch预览 集成简单高效 更多特性 有更多需求或发现bug的...
Delphi是一款著名的快速应用程序开发工具(RAD),最初由Borland公司在...随着技术的不断发展,Delphi也在不断更新和升级,以适应新的开发需求和市场需求。目前,Delphi已经支持开发针对Windows、Mac、Android和iOS的原
更新检查可确保会使用最新版的安全性功能与修正程序,浏览器自动更新新的版本,不需要用户采取任何动作,更新后会在下一次启动中自动使用。 专业测评 HTML5测试 HTML5测试(3张) CSS3测评 Acid1及Acid2均顺利...
# 关于 Swift Swift 是一种非常好的编写软件的方式,无论是手机,台式机,服务器...Swift 已经进行了多年,并且随着新特性和功能的不断发展。我们对 Swift 的目标是雄心勃勃的。我们迫不及待想看到你用它创建出的东西。
会不断提供Swift分类Demo or Gif新特性懒人Swift基本框架,正提供各种简单,方便的接口 目前支持的功能:1> 自定义导航栏、监听事件2> 滚动效果3> 正在筹备一些分类,期待您的PullRequest准备迭代:4> 正在准备滑动...
它是跨平台(linux/osx/windows/android/IOS),并按照麻省理工学院许可证. 它提供了对许多点触摸输入设备的本地支持,一个不断增长的多触控小部件库和硬件加速OpenGL绘图。Kivy旨在让您尽可能快速、轻松地构建自定义...
WPS 2013的发布首次实现各平台版本同步更新,同时,在WPS 2013中启用了全新的底层原生跨平台V9引擎,新引擎能实现在Linux、iOS、Mac等多平台的代码复用,让各个平台保持同步更新。 WPS Office (10.8.0.5391) 新增...
概述轻量级推送服务和实时在线监控平台,同时用于开发即时通信系统,基于node的socket.io,支持web,android,ios客户端,支持移动端离线推送,可进行分布式部署前言随着互联网网速的不断提升,即时消息通信的应用...
在设计的过程中,因为这三个平台的不同特性,往往要角色切换,不断的换位思维。可能新手和外行人觉得iOS和Android没什么区别,有的甚至拿Android直接照抄iOS设计就可以了。还有一些人可能对WindowsPhone平台一直觉得...
熟悉安卓和IOS系统框架和特性等; 2、熟悉Python等脚本语言使用经验,熟悉常见的web(selenium)、app(appium)自动化开发框架; 3、熟悉持续集成工具如jenkins; 4、熟悉接口测试,包括单接口测试和业务流接口测试; 5...