博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
strong 与 weak的区别
阅读量:5108 次
发布时间:2019-06-13

本文共 1419 字,大约阅读时间需要 4 分钟。

strong修饰的对象: 指针指向对象时内存计数器会+1,只要有指针指向该对象,它的内存就不会被释放。

  Sample: @property (nonatomic, strong) NSString *obj1;

       @property (nonatomic, strong) NSString *obj2;

       obj1 = @"object1"; //obj1指向对象object1, count = 1

       obj2 = obj1; //obj2也指向对象object1, count = 2

       obj1 = nil; // count = 1

       NSLog(@"obj2 = %@",obj2);

  Result: obj2 = object1

  Analyze: obj1和obj2同时指向堆中的同一个内存对象, obj1=nil, 但是obj2还是指向对象"object1", 所以堆中的对象"object1"还存在,没有被释放。

weak修饰的对象:指针指向对象时内存计数器不会+1,如果没有strong修饰的指针指向该对象时,它的内存就会被释放。

  Sample: @property (nonatomic, strong) NSString *obj1;

       @property (nonatomic,  weak) NSString *obj2;

       obj1 = @"object1"; //obj1指向对象object1, count = 1

       obj2 = obj1; //obj2也指向对象object1, 但是内存计数器不变,所以 count = 1

       obj1 = nil; // count = 0

       NSLog(@"obj2 = %@",obj2);

  Result: obj2 = null

  Analyze: obj1和obj2同时指向堆中的同一个内存对象, obj1=nil, 说明没有strong修饰的指针指向object1,所以内存被释放。

 

补充(according to Stanford iOS7 course):

  strong means: keep the object that this property points to in memory until set this property to nil (zero)

          (and it will stay in memory until everyone who has a strong pointer to it sets their property to nil too)

  weak means: if no one else has a strong pointer to this object, then you can throw it out of memory and set this property to nil.

         (this can happen at any time)

       

       

        

转载于:https://www.cnblogs.com/xiaolianghhd/p/4136949.html

你可能感兴趣的文章
软件包的使用
查看>>
linux中启动与终止lnmp的脚本
查看>>
gdb中信号的处理[转]
查看>>
学习Javascript闭包(Closure)
查看>>
LeetCode【709. 转换成小写字母】
查看>>
如何在Access2007中使用日期类型查询数据
查看>>
Jzoj4757 树上摩托
查看>>
CF992E Nastya and King-Shamans(线段树二分+思维)
查看>>
基于docker的spark-hadoop分布式集群之一: 环境搭建
查看>>
oracle 几个时间函数探究
查看>>
第一个Java Web程序
查看>>
Atomic
查看>>
div 显示滚动条与div显示隐藏的CSS代码
查看>>
Redis-1-安装
查看>>
Access denied for user ''@'localhost' to database 'mysql'
查看>>
部署支持 https 的 Nginx 服务
查看>>
‘Cordova/CDVPlugin.h’ file not found
查看>>
WebAssembly是什么?
查看>>
树状数组_一维
查看>>
如果没有按照正常的先装iis后装.net的顺序,可以使用此命令重新注册一下:
查看>>