NSString,NSMutableString使用retain, copy理解

开关电源环路学习笔记(1)-为啥要知道传递函数? 做硬件都会接触到开关电源,或多或少会接触到环路补偿。很多兄弟们也提出来让我说说这个,说明大家也都很关心,也说明这个好像有点难。 就我个人而言,我也想搞明白环路这一块,也查了一些资料,视频,不过说实话,一直都还是懵的,感觉很困难。 具体感觉就是,看资料或视频的时候,感觉好像是那么回事。但是撇开之后,就又云里雾里的感觉,总有一些想法没有找到答案。 问题 比如下面我想过的问题: 开关电源有开关,根本就不是一个线性系统,传递函数是咋弄出来的? 系统环路框图的输入量为什么不是Vin,而是参考电压V 阅读详情

一直以为copy就是深拷贝,会产生一个新的对象,指针和内容都是新的,retain只是引用计数+1。

今天测试代码的时候发现一个问题,再经仔细一测,才发现不是这么回事.

int main(int argc, char *argv[])
{
    NSString *str = @"google";
    NSString *strRetain = [str retain];
    NSString *strCopy = [str copy];
    NSMutableString *strMutCopy = [str mutableCopy];
    
    NSLog(@"str        = %p,    retainCount = %d", str, [str retainCount]);
    NSLog(@"strRetain  = %p,    retainCount = %d", strRetain, [strRetain retainCount]);
    NSLog(@"strCopy    = %p,    retainCount = %d", strCopy, [strCopy retainCount]);
    NSLog(@"strMutCopy = %p,     retainCount = %d", strMutCopy, [strMutCopy retainCount]);
   
}

output:


 

 观察打印信息可以发现,不管是retain还是copy对于NSString来说都是浅拷贝,还是指向的之前的内存区域。retainCount=-1是因为str为字符串常量,系统会用UINT_MAX来标记,系统不收回,也不做引用计数。
NSString 应用 retain 还是 copy?

1。对NSString应用retain,效率无疑是最好的

2。用copy最安全,因为NSString 为 NSMutableString 的基类,如果将NSMutableString 以retain的形式赋值给NSString后,后续修改NSMutableString会导致NSString内容的变化,这通常不是我们希望的,所以用copy最安全。

参考文档 NSCopying Protocol Reference

Your options for implementing this protocol are as follows:

  • Implement NSCopying using alloc and init... in classes that don’t inherit copyWithZone:.
  • Implement NSCopying by invoking the superclass’s copyWithZone: when NSCopying behavior is inherited. If the superclass implementation might use the NSCopyObject function, make explicit assignments to pointer instance variables for retained objects.
  • Implement NSCopying by retaining the original instead of creating a new copy when the class and its contents are immutable.

SAP 公司间采购简介 SAP公司间采购(Intercompany Procurement)是指企业集团内部不同法人实体之间的采购和销售流程。这种流程在跨国公司或有多个独立运营子公司的企业中非常常见。SAP提供了标准的功能来处理公司间采购,确保财务和物流流程的透明性和效率。以下是SAP公司间采购的基本流程及其相关模块的简介。 阅读详情

相关推荐

用python提取PDF中各类文本内容的方法

用python提取PDF中各类文本内容的方法

安静的软件工程师 6086

NSString属性声明中的copy和retain区别

前几天去面试,被问到了NSString属性声明中的copy和retain具体区别,对内存计数的影响,汗,当时没整明白,也没答出来,只知道NSString一般用copy. 首先做以下几个变量声明: @property (retain, nonatomic) NSString *retainStr; @property (copy, nonatomic) NSString *cop...

defei4441的博客 210

智能驾驶功能软件平台设计规范 第一部分:系统架构

智能驾驶功能软件平台设计规范 第一部分:系统架构2020-07-29 发布。

爱是与世界平行 6744

iOS-NSMutableString使用copy描述崩溃

用copy修饰NSMutableString导致了crash,如下 原因: 当我们用copy修饰NSMutableString后当我们实例化时,生成的是不可变的,当我们第一次使用可变操作时程序会崩溃,因此说不要用copy修饰NSMutableString 因此使用strong来进行修饰,我们使用NSMutableString就是想应用它的可变属性,自然不能实例化成不可变;与其同理的还有可变数...

MinggeQingchun的博客 749

<PLC><西门子><工控>西门子博图V18中使用SCL语言编写一个CRC16-modbus校验程序

西门子官方对于SCL语言的介绍如下:SCL 编程语言SCL 编程语言SCL(Structured Control Language,结构化控制语言)是一种基于 PASCAL 的高级编程语言。这种语言基于标准DIN EN 61131-3(国际标准为 IEC 1131-3)。根据该标准,可对用于可编程逻辑控制器的编程语言进行标准化。SCL 编程语言实现了该标准中定义的 ST 语言 (结构化文本) 的PLCopen 初级水平。语言元素。

用沸腾的热血,支付我们的人生吧! 1436

Python爬虫实战:基于Scrapy与Playwright的搜狐新闻高效爬取

在当今信息爆炸的时代,网络爬虫技术已成为数据获取和分析的重要工具。作为国内领先的新闻门户网站,搜狐新闻包含了大量有价值的新闻数据,这些数据对于舆情分析、市场研究等领域具有重要意义。本文将详细介绍如何使用Python最新的爬虫技术栈(Scrapy框架结合Playwright浏览器自动化工具)来高效爬取搜狐新闻数据。pythontitle = scrapy.Field() # 新闻标题url = scrapy.Field() # 新闻链接。

2201_76125261的博客 1552

iOS面试必看!谈谈NSString和NSMutableString的浅拷贝和深拷贝

字符串的浅拷贝和深拷贝 我们都知道@property修饰字符串时采用关键字copy,那是什么原因的,面试时常问的浅拷贝和深拷贝是什么呢? 我们先看一段代码,NSString对象调用copy方法控制台输出的name和str1地址是一样的,说明NSString没有创建新的对象,这种叫做浅拷贝,str2的地址和name的地址不同,通过断点我们知道str2指针其实是NSMutableString类型,调用mutableCopy方法创建了新的对象,返回NSMutableString类型的对象,叫做深拷贝。

CoderDCLiu的博客 455

LPDDR6与LPDDR5 channel/rank/die/bank技术探讨

LPDDR6与LPDDR5 channel/rank/die/bank技术探讨

zilan23的博客 3641

理解 retain 、copy 、NSMutableString 、NSString 的用法

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34090562的博客 120

NVIDIA Isaac Sim 联合 VS Code 开发调试环境配置

在 Visual Studio Code (VS Code) 中打开 Isaac Sim 软件包主文件夹,即可打开该工作区。注意建议在学习教程和示例时使用 Visual Studio Code。另请参见有关 VS Code 工作区的详细信息,请参阅 Visual Studio Code (VS Code) 文档。

2506_90492529的博客 3104

coredump文件的原理是啥

Core Dump(核心转储)是操作系统在程序崩溃(如段错误、非法指令等)时自动生成的一个文件,它包含了程序崩溃瞬间的。通过 core dump,开发者可以像“时间回溯”一样检查程序崩溃瞬间的状态,是调试复杂问题的利器!终止时,Linux 内核会生成 core 文件。不会生成 core dump,因为它们是“优雅终止”信号。这样 core 文件会直接压缩存储,节省磁盘空间。的文件(类似可执行文件),可以用。Core 文件本质上是一个。

二进制君 380

IOS开发中copy和retain的区别

在ios开发中我们一般都这么定义:@property (nonatomic,copy) NSString *name,而不这么定义:@property (nonatomic,retain) NSString *name,两者的差别就在一个使用copy,一个使用retain。 一直以来都不明白为什么,今天通过查阅资料总算弄明白了,所以记录一下两者的区别。

feisongfeiqin的博客 2847

《QGIS快速入门与应用基础》293:色带调整与透明设置

详细讲解了QGIS中遥感影像色带调整与透明设置的核心技术,帮助用户将遥感成果从基础合成提升到专业出图标准。主要内容包括: 色带精细化调整: 多波段真/假彩色合成的优化技巧(Gamma校正、色彩平衡、色阶端点校准) 单波段栅格数据的伪彩色规范设置(行业标准色带选择与分类方法) 透明设置: 研究区黑边/白边的消除方法 多图层叠加时的透明融合技巧 特定地物的差异化半透明显示 实用建议: 提供行业标准参数模板和效果对比图 标注新手操作红线和常见问题排查 强调符合遥感行业规范的可视化要求。

LuckyHanMo的博客 354

浅谈深浅复制,retain与copy的区别(摘抄)

在iOS开发中我们一般都这么定义:@property (nonatomic,copy) NSString *name,而不这么定义:@property (nonatomic,retain) NSString *name,两者的差别就在一个使用copy,一个使用retain。  一直以来都不明白为什么,今天通过查阅资料总算弄明白了,所以记录一下。  在说明白retain和copy的区别,首先

qq_33576957的博客 456

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

ios知识总结

1、Object-C有多继承吗?没有的话用什么代替? cocoa 中所有的类都是NSObject 的子类 多继承在这里是用protocol 委托代理 来实现的 你不用去考虑繁琐的多继承 ,虚基类的概念. ood的多态特性 在 obj-c 中通过委托来实现. 2、Object-C有私有方法吗?私有变量呢? objective-c – 类里面的方法只有两种, 静态方法和

iosBluevip的博客 569

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

ios面试题整理

ios面试题整理 分类:iphone开发2013-04-01 12:353800人阅读评论(0)收藏举报 转自:http://blog.sina.com.cn/s/blog_a7c44c880101aibh.html 1、Object-C有多继承吗?没有的话用什么代替? cocoa中所有的类都是NSObject的子类 多继承在这里是用protocol...

weixin_30723433的博客 72

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

iOS中assign,copy,retain之间的区别以及weak和strong的区别,NSString什么时候用copy,什么时候用strong

@property (nonatomic, assign) NSString *title;  什么是assign,copy,retain之间的区别?  assign: 简单赋值,不更改索引计数(Reference Counting)。  copy: 建立一个索引计数为1的对象,然后释放旧对象  retain:释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数

yq7788998的博客 1796

关于retain以及copy特质的理解

对于深拷贝和浅拷贝一直是objc中得一个重点和难点 这里说一些自己的理解 首先讲一下retain,即对receiver的保留,仅仅使其refcount+1 以NSString对象为例  在讨论引用计数之前必须声明清楚如NSString*str = @“1234”;这类存储在静态存储区的内存没有引用计数这个概念即refcount对其是没有意义的。 如下例子 NSString*str

jacky_jin的专栏 657

NSString属性使用copy还是strong

下面请看一段代码: 在ViewController.h中定义一个NSString的属性: 此处定义name的属性关键字为copy @property (nonatomic, copy) NSString *name;然后在ViewController.m中写这样一段代码:NSMutableString *rString = [[NSMutableString alloc]initWithStr

逸轻紫的博客 365

copy和strong的区别

对于copy和strong的区别主要就是能区分深拷贝还是浅拷贝。 以字符串为例:@property (retain,nonatomic) NSString *secondString; @property (copy, nonatomic) NSString *thirdString;- (void)test { NSMutableString *firstString = [NSMu

TF_LIU的博客 914

iOS的copy概念详解

1. copy概念浅复制与深复制 copy即复制,有浅复制和深复制两种。浅复制即引用复制,只拷贝对象的引用,不分配新的内存空间,深复制即对象拷贝,会创建一个对象的副本,分配新的内存空间,与原对象独立。 深复制(深拷贝,内容拷贝,deep copy) 源对象和副本对象是不同的两个对象 源对象引用计数器不变, 副本对象计数器为1(因为是新产生的) 本质是:产生了新的对象浅复制(浅拷贝,指针拷贝

lushuner的专栏 797

retain和copy还有assign的区别,以及引用计数

retain和copy还有assign的区别,以及引用计数 (2010-07-19 17:15:07) 转载▼ 标签: retain alloc release autorelease copy assign 指针 引用 持有计数 分类: iPhone 一,retain, copy, assign区别1. 假设你用malloc分配...

张明炜 152

iOS中assign、copy 、retain等关键字的含义

assign: 简单赋值,不更改索引计数 copy: 建立一个引用计数为1的对象,然后释放旧对象 retain:释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1Copy其实是建立了一个相同的对象,而retain不是: 比如一个NSString对象,地址为0×1111,内容为@”STR” Copy到另外一个NSString之 后,地址为0×2222,内容相同,新的对象ret

qq_35827461的博客 703

OC中的字符串属性(深拷贝和浅拷贝)

我们在项目中定义一个字符串属性的时候,有时候见到别人用retain,有时候见到用copy。那么到底这两种用法有什么区别呢? 这就需要我们了解深拷贝和浅拷贝和区别了。 其实copy是创建一个新对象,retain是创建一个指针。 Copy其实是建立了一个相同的对象,而retain不是。怎么理解呢? 比如我们有一个NSString对象,地址为0×1212,内容为@”str” 。Copy到另外一个NSS

凉城旧梦的博客 1550
上一篇: "ios模拟器未能安装此应用程序"解决办法
下一篇: IOS图像拉伸解决方案
LIN1986LIN
博客等级 码龄19年 17粉丝 93原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值