assign,copy,retain ,weak,strong(二)
来源:互联网 发布:海岛奇兵 步兵升级数据 编辑:程序博客网 时间:2024/04/28 21:11
如果需要持有一个对象,那么对其发送retain 如果之后不再使用该对象,那么需要对其发送release(或者autorealse) 每一次对retain,alloc或者new的调用,需要对应一次release或autorealse调用
什么时候retain
例如:person是一个类在vc声明了属性person1和person2@property (nonatomic,strong) person *person1;self.person1 = [[person alloc]init];//在alloc的时候开辟了一个内存地址 OXOOOOOOea3 来存储person1这个指针,此时OXOOOOOOea3的引用计数 retainCount = 1,这个1代表有一个指针指向OXOOOOOOea3这块内存此时添加一句代码self.person2 = self.person1;//注意了,不是person1的值给person2,而是声明了一个person的类型指针person2 也指向了person1的内存地址//此时 OXOOOOOOea3的retainCount +1 = 2,代表OXOOOOOOea3这个内存地址有两个指针在指向这块内存,这就是引用计数的原理//换句话说,只要有一个新的指针指向OXOOOOOOea3内存地址,那么它的引用计数retainCount就+1,这时候person1使用完了,需要释放,在mrc的时候需要写[self.person1 release];//这时候OXOOOOOOea3的引用计数retainCount-1=1//现在OXOOOOOOea3还有一个指针指向它,它并不会消失现在person2也使用完毕了,arc也会帮我们插入一条[person2 release];//这时候person2这个指针指向的内存OXOOOOOOea3 retainCount-1=0,代表已经没有指针指向这块内存地址了//那么ok,OXOOOOOOea3内存释放
什么是strong
上面讲到mrc OXOOOOOOea3内存地址的引用计数,通过retain来增加。
- 在oc的arc中,strong 又称为强引用,换一句贴切点的strong就是指针,strong声明的都是需要指向某一块内存地址的指针,说三次,strong是指针,strong是指针,strong是指针。
- 所以当你声明的strong对象从内存中创建的时候会插入mrc的retain,来让你指向的内存地址 引用计数retainCount+1
- 什么又是强引用?,只要strong声明的指针 指向这个内存地址,一直指这它,那么这个块内存地址就不会被释放
- 除非指向的内存 引用计数retainCount=0或者超出了你声明指针的作用域,比如你在vc2声明person2,返回到vc1,那么vc2会delloc,所有vc2将会从该内存中移除。
这就是强引用
什么是weak
举个例子加深理解,
- 小明找到了一个很漂亮的女朋友小花
- 小明和小花是恋人关系,并且小花说了,只爱小明一个只要小明不爱她了,她就跳楼,strong
- 小军也喜欢小花,做不成恋人就做闺蜜吧,嗯weak,就只能看看而已
- 真的有一天小明变心了,爱上了如花,小花伤心欲绝,跳楼而死。从此小军再也见不到小花了。(小花retainCount-1=0)
//解释一下,此时小花这个内存只有小明这个strong指针指向,同时能被weak指针看到,当小明不再指向小花,小花此时没有指针指向它,从内存杀死了,当然小军weak就再也看不到了
什么是copy
继续上面的故事,结局不一样了
- 小明strong一直深爱着小花(内存)
- 官二代小军copy出现,说了,他一定要得到小花,不惜一切代价。
- 小明没办法,只有让了,照着小花的真人模样做了一个硅胶娃娃送给了小军。
- 此时小军….
小花是内存,做的娃娃是另一个内存,容易懂吧
什么是assign
一样的故事。。。
- 小明strong和小花快乐的玩耍着
- 土匪小军assign出现 ,说了,他一定要得到小花,不惜一切代价。
- 这次小军不喜欢娃娃了,直接掳走了小花,但是小花心里只装着一个人就是小明,心中未曾多个人,引用计数retainCount不加1,还是1,小明和小花还是一对恋人
- 小花茶饭不思,不久GG思密达上天了(retainCount-1=0)
- 小明从此注孤生置为nil
- 小军已经入了魔,天天还是与小花的空壳在一起,还爱着小花,此时小花已经死去。是该把小军送进精神病院了(该把它置为nil了,不然始终是一个指向不存在的地址,使用到的时候要崩溃)
1 0
- assign,copy,retain ,weak,strong(二)
- strong/weak/assign/copy/retain
- (ios实战):retain,copy,assign及autorelease ,strong,weak
- (ios实战):retain,copy,assign及autorelease ,strong,weak
- 内存管理(retain,assign,copy,strong,weak)
- retain copy assign strong weak的区别(iOS)
- strong assign weak retain copy 区别
- @propeerty中retain assign copy weak strong
- copy strong assign weak retain 的用法
- copy strong assign weak retain 的用法
- retain,strong,weak,assign,copy的理解
- copy retain assign nonatomic strong weak _unsafe_unretained
- weak assign 和strong copy retain异同
- assign, copy, retain, nonatomic, strong, weak属性
- IOS retain strong copy assign weak关键字
- retain、strong、weak、assign
- copy、strong、weak、assign
- copy, retain, assign , readonly , readwrite,strong,weak,nonatomic整理
- Hadoop2.X伪分布式安装
- 数据结构基础——内存中数据存储的基本方式(单链表)
- Java——调用命令行执行命令后到Java控制台显示
- Linux stty命令
- CentOS 修改主机名
- assign,copy,retain ,weak,strong(二)
- 云瓣 SH.Sample 源代码
- 郝斌的C语言基础 136 指针变量的运算
- Java-JDBC_简单示例CURD
- python3 django models保存filefiled字段统一目录、不修改文件名的方法
- 抽象类接口等知识总结
- 第一次
- Java---方法重载和方法覆盖
- 使用node.js的http模块实现爬虫小工具