虽然开发IOS好多年了。但是这几个关键词总是深深困扰着我。加上IOS开发从mRC到ARC的过渡,这些概念更为困扰我了。

先说weak与assign.weak只能修饰对象,不能修饰基本数据类型。而assign既可以修饰基本数据类型,也可以修饰对象。但一般用于修饰基本数据类型。因为当你用assgin修饰对象时候,如果你修饰的对象销毁,该指针的指向地址仍然存在。所以造成野指针。而这个野指针的内存在堆上,所以容易造成堆内存崩溃。而基本数据类型则存在于栈上,栈上内存系统会自动处理,不会造成野指针。

Strong表示指向并且拥有此对象。其修饰的对象引用计数会加1.这个对象只要他的引用计数不为0,该对象就不会被销毁。可以强行设置为nil销毁它。

那么stroing和copy的区别是什么呢?

strong是复制多个指针指向同一个地址。而copy在内存中拷贝一份对象的值。所以,指针是指向不同的地址。copy一般用在哪里呢?用在那些拥有可变类型的不可变对象上。比如NSString。你改变字符串,实际上他是新开辟了一份内存,吧值拷贝后,进行操作之后返回的新的内存地址。

再说说nonatomic以及atomic,

nonatomic是非原子性,就是可以多线程访问,效率高。

而atomic,是原子性的,属于安全级别的,同一个时刻只能有同一个线程访问,具有对资源的独占性,当然,效率低。

最新文章

  1. Uva11374 Airport Express
  2. dell新服务器安装系统
  3. Intellij IDEA-can't use subversion command line client : svn
  4. Type 'System.IO.FileStream' with data contract name 'FileStream:http://schemas.datacontract.org/2004/07/System.IO' is not expected.
  5. mysql 的存储过程调试软件
  6. linux 下终端复用软件推荐——tmux
  7. 对于requirejs AMD模块加载的理解
  8. LINUX系统中动态链接库的创建与使用{补充}
  9. INSERTION_SORT插入排序C++实现
  10. 执行Git命令时出现 SSL certificate problem 的解决办法
  11. 【java多线程系列】java内存模型与指令重排序
  12. 【转】IE浏览器快捷键大全
  13. @ExceptionHandler异常统一处理
  14. SQL Server 创建跨库查詢、修改、增加、删除
  15. centos用YUM装mysql笔记
  16. OkHttp的封装和使用详解
  17. centos7下kubernetes(10。kubernetes-daemonset)
  18. springboot对oracle的配置
  19. 关于xftp上传文件状态错误的解决
  20. DOS命令行简单用法

热门文章

  1. python-迭代器与可迭代对象
  2. .NET 内存分配笔记
  3. sklearn中报错ValueError: Expected 2D array, got 1D array instead:
  4. 关于git的认证方式
  5. vert.x 学习笔记
  6. WCF基础二
  7. ASP.NET页面之间传值的方式之Server.Transfer(个人整理)
  8. sitecore8.2 如何关闭性能计数器
  9. echart的x换行
  10. Java EE开发技术课程第五周(Applet程序组件与AJAX技术)