博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS 强引用
阅读量:6238 次
发布时间:2019-06-22

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

KCPerson.h#import @interface KCPerson : NSObject@property (nonatomic,assign) int no;@endKCPerson.m#import "KCPerson.h"@implementation KCPerson-(NSString *)description{    return [NSString stringWithFormat:@"no=%i",_no];}@endmain.m#import #import "KCPerson.h"int main(int argc, const char * argv[]) {    @autoreleasepool {                //strong        __strong KCPerson *person1=[[KCPerson alloc]init];        __strong KCPerson *person2=person1;        person1.no=1;        NSLog(@"%@",person2); //结果:no=1        person1=nil;        NSLog(@"%@",person2); //结果:no=1                        //weak        __strong KCPerson *person3=[[KCPerson alloc]init];        __weak KCPerson *person4=person3;        person3.no=3;        NSLog(@"%@",person4); //结果:no=3        person3=nil;        NSLog(@"%@",person4); //结果:(null)    }    return 0;}

由于person1和person2都指向一个对象并且都是强引用,因此当person1设置为nil时对象仍然不会释放,所以此时person2还是指向这个对象,可以正常输出;person3和它指向的对象是强引用,而person4是弱引用,因此当person3设置为nil后,对象没有了强引用就会释放,此时再打印person4自然就是null。为了说明strong和weak的使用,下面使用图形方式描绘上面的情况:

strong--person1和person2的关系

150850299369962.gif

150850312486164.gif

由此得出如下结论:

不管是怎么管理内存都是针对对象类型而言(无论是strong,weak都不能应用到基本数据类型),对于基本数据类型直接声明为assign就可以了,它不需要我们自己管理内存;

所有的指针变量默认都是__strong类型,因此我们通常省略不写__strong;
如果一个对象没有强引用之后即使存在弱引用它也会被释放,与此同时弱引用将被设置为nil;

转载地址:http://mzkia.baihongyu.com/

你可能感兴趣的文章
联通专线切换成移动专线问题故障解决
查看>>
Oracle11gR2 for Linux6.4 静默安装
查看>>
IO-字符流-FileReader
查看>>
再谈全局网HBase八大应用场景
查看>>
mysql数据库基本命令
查看>>
如何rename datafile name中存在乱码的数据文件
查看>>
Oracle Sun Exadata V2 ,X2-2,X2-8 主要配置对比
查看>>
制造业如何将工人师傅的隐性技能转化为显性知识?
查看>>
JXplorer 的简单使用
查看>>
__name__ == "__main__"
查看>>
编译安装nginx1.10.2最新版、php7.0.12最新版、mysql5.7.16最新版
查看>>
希尔排序(Golang)
查看>>
修改grub背景图
查看>>
netapp日志中hw_assist: hw_assist functionality is inactive.排错
查看>>
SaltStack实战之配置管理-状态间关系
查看>>
sc 与net命令的区别
查看>>
2018年区块链五大关键趋势预测:区块链与物联网结合有望突破
查看>>
delphi webservices传数据
查看>>
CentOS7离线安装docker问题解决
查看>>
moss 2007内容类型,如文档库设定新建xx菜单
查看>>