ios中关键词weak,assign,copy.strong等的区别
Posted Howl Code Laboratory
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ios中关键词weak,assign,copy.strong等的区别相关的知识,希望对你有一定的参考价值。
虽然开发ios好多年了。但是这几个关键词总是深深困扰着我。加上IOS开发从mRC到ARC的过渡,这些概念更为困扰我了。
先说weak与assign.weak只能修饰对象,不能修饰基本数据类型。而assign既可以修饰基本数据类型,也可以修饰对象。但一般用于修饰基本数据类型。因为当你用assgin修饰对象时候,如果你修饰的对象销毁,该指针的指向地址仍然存在。所以造成野指针。而这个野指针的内存在堆上,所以容易造成堆内存崩溃。而基本数据类型则存在于栈上,栈上内存系统会自动处理,不会造成野指针。
Strong表示指向并且拥有此对象。其修饰的对象引用计数会加1.这个对象只要他的引用计数不为0,该对象就不会被销毁。可以强行设置为nil销毁它。
那么stroing和copy的区别是什么呢?
strong是复制多个指针指向同一个地址。而copy在内存中拷贝一份对象的值。所以,指针是指向不同的地址。copy一般用在哪里呢?用在那些拥有可变类型的不可变对象上。比如NSString。你改变字符串,实际上他是新开辟了一份内存,吧值拷贝后,进行操作之后返回的新的内存地址。
再说说nonatomic以及atomic,
nonatomic是非原子性,就是可以多线程访问,效率高。
而atomic,是原子性的,属于安全级别的,同一个时刻只能有同一个线程访问,具有对资源的独占性,当然,效率低。
以上是关于ios中关键词weak,assign,copy.strong等的区别的主要内容,如果未能解决你的问题,请参考以下文章
ios OC 关键字 copy,strong,weak,assign的区别
iOS内存管理-- iOS中strong,copy,retain,weak,assign的用法
strong ,weak,copy关键字使用,及weak跟assign区别
iOS中assign,copy,retain之间的区别以及weak和strong的区别
iOS 开发 property,strong,weak,retain,assign,copy,nomatic 的区别及使用