ios中关键词weak,assign,copy.strong等的区别
2024-09-22 08:10:44
虽然开发IOS好多年了。但是这几个关键词总是深深困扰着我。加上IOS开发从mRC到ARC的过渡,这些概念更为困扰我了。
先说weak与assign.weak只能修饰对象,不能修饰基本数据类型。而assign既可以修饰基本数据类型,也可以修饰对象。但一般用于修饰基本数据类型。因为当你用assgin修饰对象时候,如果你修饰的对象销毁,该指针的指向地址仍然存在。所以造成野指针。而这个野指针的内存在堆上,所以容易造成堆内存崩溃。而基本数据类型则存在于栈上,栈上内存系统会自动处理,不会造成野指针。
Strong表示指向并且拥有此对象。其修饰的对象引用计数会加1.这个对象只要他的引用计数不为0,该对象就不会被销毁。可以强行设置为nil销毁它。
那么stroing和copy的区别是什么呢?
strong是复制多个指针指向同一个地址。而copy在内存中拷贝一份对象的值。所以,指针是指向不同的地址。copy一般用在哪里呢?用在那些拥有可变类型的不可变对象上。比如NSString。你改变字符串,实际上他是新开辟了一份内存,吧值拷贝后,进行操作之后返回的新的内存地址。
再说说nonatomic以及atomic,
nonatomic是非原子性,就是可以多线程访问,效率高。
而atomic,是原子性的,属于安全级别的,同一个时刻只能有同一个线程访问,具有对资源的独占性,当然,效率低。
最新文章
- Uva11374 Airport Express
- dell新服务器安装系统
- Intellij IDEA-can't use subversion command line client : svn
- Type 'System.IO.FileStream' with data contract name 'FileStream:http://schemas.datacontract.org/2004/07/System.IO' is not expected.
- mysql 的存储过程调试软件
- linux 下终端复用软件推荐——tmux
- 对于requirejs AMD模块加载的理解
- LINUX系统中动态链接库的创建与使用{补充}
- INSERTION_SORT插入排序C++实现
- 执行Git命令时出现 SSL certificate problem 的解决办法
- 【java多线程系列】java内存模型与指令重排序
- 【转】IE浏览器快捷键大全
- @ExceptionHandler异常统一处理
- SQL Server 创建跨库查詢、修改、增加、删除
- centos用YUM装mysql笔记
- OkHttp的封装和使用详解
- centos7下kubernetes(10。kubernetes-daemonset)
- springboot对oracle的配置
- 关于xftp上传文件状态错误的解决
- DOS命令行简单用法