copy 和 mutableCopy 有点乱

对 string literal (字符串字面量) 执行 copy

要打印指针指向对象的地址和指针本身的地址,可以使用 %p 格式符来输出指针地址。以下代码,展示了 originalStringcopiedString 的指针地址和指向对象的地址:

NSString *originalString = @"Hello, World!";
NSString *copiedString = [originalString copy];// 打印字符串内容
NSLog(@"Original: %@", originalString); // 输出: Hello, World!
NSLog(@"Copied: %@", copiedString);     // 输出: Hello, World!// 打印指针本身的地址
NSLog(@"Original pointer address: %p", &originalString);
NSLog(@"Copied pointer address: %p", &copiedString);// 打印指针指向对象的地址
NSLog(@"Original object address: %p", originalString);
NSLog(@"Copied object address: %p", copiedString);

Xcode Version 15.1 (15C65) & 模拟器(iPhone 15)运行结果如下:

// 打印的内容一样
Original: Hello, World!
Copied: Hello, World!
// 指针本地的地址不一样,说明是不同的指针
Original pointer address: 0x7ff7b1a5fa98
Copied pointer address: 0x7ff7b1a5fa90
// 不同的指针指向同一个对象
Original object address: 0x10e4a0070
Copied object address: 0x10e4a0070

解释

  • Original: Hello, World!Copied: Hello, World! 输出字符串内容。
  • Original pointer address: %p 输出指针 originalString 本身在栈中的地址。
  • Copied pointer address: %p 输出指针 copiedString 本身在栈中的地址。
  • Original object address: %p 输出 originalString 指向的字符串对象在堆中的地址。
  • Copied object address: %p 输出 copiedString 指向的字符串对象在堆中的地址。

可以看到,由于 NSString 是不可变对象,执行 copy 方法时并不会产生新的对象,而是返回相同的对象。所以 originalStringcopiedString 指向相同的内存地址(对象地址相同),但是它们的指针本身在栈中的地址是不同的。


对 string literal (字符串字面量) 执行 mutableCopy

    NSString *originalString = @"Hello, World!";NSString *copiedString = [originalString mutableCopy];// 打印字符串内容NSLog(@"Original: %@", originalString); // 输出: Hello, World!NSLog(@"Copied: %@", copiedString);     // 输出: Hello, World!// 打印指针本身的地址NSLog(@"Original pointer address: %p", &originalString);NSLog(@"Copied pointer address: %p", &copiedString);// 打印指针指向对象的地址NSLog(@"Original object address: %p", originalString);NSLog(@"Copied object address: %p", copiedString);

Xcode Version 15.1 (15C65) & 模拟器(iPhone 15)运行结果如下:

Original: Hello, World!
Copied: Hello, World!
// 不同的指针
Original pointer address: 0x7ff7be102a98
Copied pointer address: 0x7ff7be102a90
// 指向不同的对象
Original object address: 0x101dfd070
Copied object address: 0x600000c80090

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/870612.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用 FFmpeg 处理视频:简介、常用命令及在 C++ 中调用 FFmpeg

文章目录 使用 FFmpeg 处理视频:简介、常用命令及在 C 中调用 FFmpeg一、FFmpeg 简介1. 什么是 FFmpeg?2. 主要特性3. 官方网站和文档 二、FFmpeg 常用命令1. 视频转码2. 提取音频3. 剪切视频4. 合并视频5. 调整分辨率6. 视频截图7. 推流8. 拉流 三、在 …

【Go系列】 array、slice 和 map

承上启下 我们上一篇文章中介绍了if和for,这不得练习下,让我们一起来实践一下如何使用 continue 语句来计算100以内的偶数之和。在我们编写代码的过程中,continue 语句将会帮助我们跳过某些不需要的迭代,比如在这个例子中&#xf…

欣奇随机美图源码

欣赏养眼美图让人心情愉悦 新增正能量进站引导首页 上传文件解压即可用有手就行 美图输出接口自判断版 http://mt.xqia.net/api.php http://mt.xqia.net/api.php?typejson 源码下载:https://download.csdn.net/download/m0_66047725/89520368 更多资源下载&…

20240711每日消息队列-------------MQ消息的积压的折磨

目标 解决MQ消息的积压 背景 菜馆系统----------- 系统读取消息,处理业务逻辑,持久化订单和菜品数据,然后将其显示在菜品管理客户端上。 最初我们的用户基数很小,上线后的一段时间内,MQ消息通信还算顺利。 随着用户…

基于深度学习的视频内容分析

基于深度学习的视频内容分析是一种利用深度学习技术对视频数据进行处理和理解,以提取有用信息、识别对象和行为、检测事件和生成描述等的方法。这种技术在监控安全、视频搜索、自动驾驶、智能家居和娱乐等多个领域具有广泛应用。以下是关于这一领域的系统介绍&#…

java实现对多层json排序

1、概述 目的:对多层json排序,按字母的升序排序。实现方案:利用java中的TreeMap排序特性进行排序。 2、工具类 package com.ybw.util;import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject;import java.util.Map;…

(三)大模型/人工智能/机器学习/深度学习/NLP

一.模型 模型,简单来说,就是用来表示或解释某个事物、现象或系统的一种工具或框架。它可以是实体的,也可以是虚拟的,目的是为了帮助我们更好地理解和预测所描述的对象。在生活中,模型无处不在,它们以各种形…

R包:‘ggcharts好看线图包‘

介绍 ggcharts提供了一个高级{ggplot2}接口,用于创建通用图表。它的目标既简单又雄心勃勃:让您更快地从数据可视化的想法到实际的绘图。所以如何?通过处理大量的数据预处理,为您模糊{ggplot2}细节和绘图样式。生成的图是ggplot对象,可以使用…

蓝桥 7.11 dp

2.砝码称重 - 蓝桥云课 (lanqiao.cn) 思路 动态规划的核心思想是将问题分解成更小的子问题,并存储子问题的解,以避免重复计算 数组 dp[i][j] 表示使用前 i 个砝码可以称出的重量为 j 的数量 更新过程如下: 1.初始化:dp[0][0] …

java中关于反射与动态代理

java中关于反射与动态代理 java反射技术 1、什么是反射? Java反射说的是在运行状态中,对于任何一个类,我们都能够知道这个类有哪些方法和属性。对于任何一个对象,我们都能够对它的方法和属性进行调用。我们把这种动态获取对象信…

python:sympy 求解一元五次方程式

pip install sympy 或者 本人用的 anaconda 3 自带 sympy 在北大数学训练营,韦东奕 用卡丹公式 巧妙 求解一元五次方程式: \latex $x^510*x^320*x-4 0$ from sympy import *x symbols(x) expr x**5 10*x**3 20*x -4# 用卡丹公式 尝试化简 a sym…

鸿蒙开发工程师面试题-架构篇

1. 假如让你负责鸿蒙App架构设计,你会关注哪些方面? 分层架构设计: 将应用划分为产品定制层、基础特性层和公共能力层,以降低层间依赖性,提升代码可维护性。通过分层架构设计,进一步明确每层的职责和层间交…

【IOS】React Native之HelloWorld

RN搭建开发环境 rvm 安装3.2.2 brew install node18 brew install watchman# 使用nrm工具切换淘宝源 npx nrm use taobao# 如果之后需要切换回官方源可使用 npx nrm use npmnpm install -g yarnbrew install cocoapodsnpm uninstall -g react-native-cli react-native-communi…

<数据集>表情识别数据集<目标检测>

数据集格式:VOCYOLO格式 图片数量:2504张 标注数量(xml文件个数):2504 标注数量(txt文件个数):2504 标注类别数:7 标注类别名称:[Neutral, Happy, Angry, Fear, Sad, surprised, Disguist] 序号类别名…

小白学webgl合集-import.meta.url 和 new URL() bug

为什么使用 import.meta.url 和 new URL() 动态路径解析: 在 ESM(ECMAScript Modules)环境中,import.meta.url 提供了当前模块的完整 URL。结合 new URL(),你可以基于这个 URL 动态解析其他资源的路径。这样可以确保路…

开始Linux之路(暑假提升)

人生得一知己足矣,斯世当以同怀视之。——鲁迅 Linux操作系统简单操作指令 1、ls指令2、pwd命令3、cd指令4、mkdir指令(重要)5、whoami命令6、创建一个普通用户7、重新认识指令8、which指令9、alias命令10、touch指令11、rmdir指令 及 rm指令(重要)12、man指令(重要…

Transformer——多头注意力机制(Pytorch)

1. 原理图 2. 代码 import torch import torch.nn as nnclass Multi_Head_Self_Attention(nn.Module):def __init__(self, embed_size, heads):super(Multi_Head_Self_Attention, self).__init__()self.embed_size embed_sizeself.heads headsself.head_dim embed_size //…

【VSCode】设置背景图片

1.下载background插件:拓展程序→background→install安装→设置: 2.点击在 settings.json 中编辑: 3.将settings.json文件中所有代码注释,添加以下代码: {// 是否开启背景图显示"background.enabled": t…

【Linux杂货铺】1.环境变量

1.环境变量基本概念 环境变量( environment variables )一般是指在操作系统中用来指定操作系统运行环境的一些参数。如:我们在编写 C / C +代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪…

【Go系列】 Go语言数据结构

承上启下 在上一次的思维碰撞中,我们的小试牛刀是一段温馨的代码小练习——将“Hello World”这个熟悉的问候,替换成了我们自己的名字。是的,你没听错,就是这么简单!以我为例,我将“Hello World”轻轻一变&…