博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
strong retain copy对于 nsstring,nsmutablestring的区别
阅读量:7087 次
发布时间:2019-06-28

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

#import "ViewController.h"

@interface ViewController ()
@property (retain,nonatomic) NSString *myRetainStr;
@property (copy, nonatomic) NSString *myCopyStr;
@property (strong, nonatomic) NSString *myStrongStr;
@end
@implementation ViewController
- (void)viewDidLoad {
    [super viewDidLoad];
    
    //[self testNSMutableStringCopyRetain];
    //[self testNSStringCopyRetain];
    //[self testNSStringStrongRetain];
    [self testNSMutableStringStrongRetain];
    
    //结论
    //retain和strong对于nsstrong和nsmutablestring效果都一样。都是指向一个地址。
    //对于nstring,retain和copy效果也一样。都是指向同一个地址。
    //对于nsmutablestring,retain和copy效果不一样。retain添加一个引用计数。copy实现深复制。
    //所以,nstring和nsmutablestring在一般情况下用copy修饰符都是完全正确的。
    
}
//NSMutableString的retain和copy区别
-(void)testNSMutableStringCopyRetain{
    NSMutableString *mStr = [NSMutableString stringWithFormat:@"abc"];
    self.myRetainStr   = mStr;
    self.myCopyStr     = mStr;
    NSLog(@"mStr:%p,%p",  mStr,&mStr);
    NSLog(@"retainStr:%p,%p", _myRetainStr, &_myRetainStr);
    NSLog(@"copyStr:%p,%p",   _myCopyStr, &_myCopyStr);
    
    //    2015-06-10 14:49:38.757 strong retain copy nsstring区别[6812:359227] mStr:0x7fed98536cd0,0x7fff56a199b8
    //    2015-06-10 14:49:38.758 strong retain copy nsstring区别[6812:359227] retainStr:0x7fed98536cd0,0x7fed98541fd8
    //    2015-06-10 14:49:38.758 strong retain copy nsstring区别[6812:359227] copyStr:0x7fed9853db50,0x7fed98541fe0
    
    //从运行结果看出,对于NSMutableString retain是添加引用计数。 copy是深复制
}
//NSString的retain和copy区别
-(void)testNSStringCopyRetain{
    NSString *mStr = [NSString stringWithFormat:@"abc"];
    self.myRetainStr   = mStr;
    self.myCopyStr     = mStr;
    NSLog(@"mStr:%p,%p",  mStr,&mStr);
    NSLog(@"retainStr:%p,%p", _myRetainStr, &_myRetainStr);
    NSLog(@"copyStr:%p,%p",   _myCopyStr, &_myCopyStr);
    
//    2015-06-10 14:53:19.822 strong retain copy nsstring区别[6847:361075] mStr:0x7fbc00c44c30,0x7fff547b69b8
//    2015-06-10 14:53:19.822 strong retain copy nsstring区别[6847:361075] retainStr:0x7fbc00c44c30,0x7fbc00d12d58
//    2015-06-10 14:53:19.822 strong retain copy nsstring区别[6847:361075] copyStr:0x7fbc00c44c30,0x7fbc00d12d60
    
    //从运行结果看出,对于NSString来看 retain是添加引用计数。 copy是浅复制。他们之间没有区别
    
}
//NSString的retain和Strong区别
-(void)testNSStringStrongRetain{
    NSString *mStr = [NSString stringWithFormat:@"abc"];
    self.myRetainStr   = mStr;
    self.myStrongStr     = mStr;
    NSLog(@"mStr:%p,%p",  mStr,&mStr);
    NSLog(@"retainStr:%p,%p", _myRetainStr, &_myRetainStr);
    NSLog(@"StrongStr:%p,%p",   _myStrongStr, &_myStrongStr);
    
//    2015-06-10 14:57:41.983 strong retain copy nsstring区别[6919:363984] mStr:0x7f894a49db90,0x7fff5aaf69b8
//    2015-06-10 14:57:41.983 strong retain copy nsstring区别[6919:363984] retainStr:0x7f894a49db90,0x7f894a543db8
//    2015-06-10 14:57:41.983 strong retain copy nsstring区别[6919:363984] StrongStr:0x7f894a49db90,0x7f894a543dc8
    
    //从运行结果看出,对于NSString来看 retain是添加引用计数。 strong是浅复制。 效果都一样。指向同一个地址
    
}
//NSMutableString的retain和Strong区别
-(void)testNSMutableStringStrongRetain{
    NSMutableString *mStr = [NSMutableString stringWithFormat:@"abc"];
    self.myRetainStr   = mStr;
    self.myStrongStr     = mStr;
    NSLog(@"mStr:%p,%p",  mStr,&mStr);
    NSLog(@"retainStr:%p,%p", _myRetainStr, &_myRetainStr);
    NSLog(@"StrongStr:%p,%p",   _myStrongStr, &_myStrongStr);
    
//    2015-06-10 15:01:54.719 strong retain copy nsstring区别[6963:366057] mStr:0x7f9033715590,0x7fff58f749b8
//    2015-06-10 15:01:54.720 strong retain copy nsstring区别[6963:366057] retainStr:0x7f9033715590,0x7f9033617e28
//    2015-06-10 15:01:54.720 strong retain copy nsstring区别[6963:366057] StrongStr:0x7f9033715590,0x7f9033617e38
    
    
    //从运行结果看出,对于NSString来看 retain是添加引用计数。 strong是浅复制。 效果都一样。指向同一个地址
    
}

转载于:https://www.cnblogs.com/NSNULL/p/4566094.html

你可能感兴趣的文章
图文教程自动登录expect脚本实例
查看>>
2019 第四周 开发笔记
查看>>
CORBA分布式实现
查看>>
第五天的学习
查看>>
微信小程序小技巧系列《二》show内容展示,上传文件编码问题
查看>>
Rancher Kubernetes Engine(RKE)正式发布:闪电般的Kubernetes安
查看>>
$.get()请求返回一个html页面,获取该页面特定id的元素
查看>>
Linux中的加解密实现
查看>>
Java开发GUI之CardLayout卡片布局
查看>>
将自己本地的项目托管到github上
查看>>
yum仓库搭建
查看>>
this怎么用(基础)
查看>>
安装server2008后,提示“Windows无法验证此文件的数字签名”
查看>>
一个中文空格引起的bug
查看>>
vmware用U盘安装win10
查看>>
CSS3内容溢出详解
查看>>
SEO人员如何做内容链接?
查看>>
SpringCloud源码:Ribbon负载均衡分析
查看>>
统计自己写的代码量
查看>>
配置防盗链
查看>>