当前位置: 首页 > news >正文

做爰全过程网站免费的视频教程上海网站关键词排名

做爰全过程网站免费的视频教程,上海网站关键词排名,江苏网站开发公司,网站建设技术支持牛商网字符串的拷贝操作 对 string literal (字符串字面量) 执行 copy 要打印指针指向对象的地址和指针本身的地址,可以使用 %p 格式符来输出指针地址。以下代码,展示了 originalString 和 copiedString 的指针地址和指向对象的地址: NSString *…

字符串的拷贝操作

对 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

对 mutable string 执行 copy

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

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

Original: Hello, World!
Copied: Hello, World!
doubleCopied: Hello, World!
Original pointer address: 0x7ff7be573a98
Copied pointer address: 0x7ff7be573a90
Double copied pointer address: 0x7ff7be573a88
Original object address: 0x600000c05e30
Copied object address: 0x600000240fa0
Double copied object address: 0x600000240fa0

对 mutable string 执行 mutableCopy

    NSString *originalString = [NSMutableString stringWithString:@"Hello, World!"];NSString *copiedString = [originalString mutableCopy];NSString *doubleCopiedString = [copiedString mutableCopy];// 打印字符串内容NSLog(@"Original: %@", originalString); // 输出: Hello, World!NSLog(@"Copied: %@", copiedString);     // 输出: Hello, World!NSLog(@"doubleCopied: %@", doubleCopiedString); // 输出: Hello, World!// 打印指针本身的地址NSLog(@"Original pointer address: %p", &originalString);NSLog(@"Copied pointer address: %p", &copiedString);NSLog(@"Double copied pointer address: %p", &doubleCopiedString);// 打印指针指向对象的地址NSLog(@"Original object address: %p", originalString);NSLog(@"Copied object address: %p", copiedString);NSLog(@"Double copied object address: %p", doubleCopiedString);
Original: Hello, World!
Copied: Hello, World!
doubleCopied: Hello, World!
Original pointer address: 0x7ff7b7523a98
Copied pointer address: 0x7ff7b7523a90
Double copied pointer address: 0x7ff7b7523a88
Original object address: 0x600000c7c510
Copied object address: 0x600000c7c6c0
Double copied object address: 0x600000c7c9f0

拓展 - 什么是字符串驻留(String Interning)

在编程语言中,字符串驻留(String Interning)是一种优化技术,用于减少内存使用和提高字符串比较的效率。它通过确保相同内容的字符串只在内存中存储一份,从而避免重复创建相同的字符串对象。

字符串驻留的工作原理

字符串驻留的基本思想是将相同内容的字符串存储在一个全局的字符串池中。当需要创建一个新字符串时,先检查这个字符串池中是否已经存在相同内容的字符串。如果存在,则直接返回池中已有的字符串的引用;如果不存在,则创建新字符串并将其添加到字符串池中。

字符串驻留的优点

  1. 节省内存:通过避免存储多个相同内容的字符串,字符串驻留可以显著减少内存使用。
  2. 提高字符串比较的效率:由于驻留的字符串是唯一的,比较两个字符串是否相同只需要比较它们的引用(指针),而不需要逐字符比较内容。这使得字符串比较操作非常高效。

字符串驻留在 Objective-C 中的应用

在 Objective-C 中,编译器和运行时环境对字符串常量进行了优化,使得相同的字符串常量在内存中只存在一份。这种优化由编译器和运行时自动处理,开发者无需额外干预。

以下是一个示例,展示了字符串常量驻留的效果:

NSString *string1 = @"Hello, World!";
NSString *string2 = @"Hello, World!";NSLog(@"%p", string1); // 输出某个地址
NSLog(@"%p", string2); // 输出与 string1 相同的地址

在这个示例中,string1string2 指向相同的内存地址,因为编译器对字符串常量进行了驻留优化。

动态创建的字符串

与字符串常量不同,动态创建的字符串(例如通过 stringWithFormat:initWithString: 等方法创建的字符串)不会自动进行驻留。即使它们的内容相同,它们在内存中的地址也可能不同:

NSString *dynamicString1 = [NSString stringWithFormat:@"Hello, World!"];
NSString *dynamicString2 = [NSString stringWithFormat:@"Hello, World!"];NSLog(@"%p", dynamicString1); // 输出某个地址
NSLog(@"%p", dynamicString2); // 输出不同的地址

在这个示例中,dynamicString1dynamicString2 指向不同的内存地址,因为它们是动态创建的字符串对象。

强制字符串驻留

虽然动态创建的字符串不会自动驻留,但可以通过调用 NSStringintern 方法(注意,这在 Objective-C 中并不是一个标准方法,而是在某些语言中存在)将字符串显式地添加到驻留池中。例如,在 Java 中有 String.intern() 方法,但在 Objective-C 中并没有直接的等效方法。

小结

字符串驻留(String Interning)是一种有效的优化技术,广泛应用于各种编程语言中。在 Objective-C 中,字符串常量会自动进行驻留,而动态创建的字符串则不会。理解字符串驻留的机制有助于优化内存使用和提高程序的性能。

希望这篇博客能帮助你更好地理解字符串驻留的概念及其在实际编程中的应用。如果你有任何问题或需要进一步的解释,请随时联系我!


参考资料

  • Apple Developer Documentation
  • Objective-C Programming Guide
  • String Interning - Wikipedia
http://www.zhongyajixie.com/news/35113.html

相关文章:

  • 在本地做的网站上传到空间之后_刷新就跳到本地的网址怎么办聊城网站开发
  • 积积桶肤肤的免费软件大全网络推广seo怎么做
  • 做包装盒效果图的网站北京网站优化排名推广
  • 青岛专业做网站的公司有哪些电子邮件营销
  • 重庆万州网站建设找谁重庆百度seo整站优化
  • 公积金网站怎么做增员网站关键词排名优化
  • 数码网站建设的规模与类别seo优化网站优化
  • 资海网络一年做多少网站网络营销员岗位的职责与要求
  • 用什么工具建设网站百度云网盘资源
  • 一个外国人做的破解游戏网站搜狗站长平台验证网站
  • 网站开发制作软件营销策略分析
  • 安徽建设工程信息网站广州今日头条新闻最新
  • 厦门网站建设优化windows优化大师自动安装
  • wordpress展示产品南宁seo服务优化
  • 线上编程课哪家好公众号seo排名软件
  • 河南做酒店网络系统网站广告推广赚钱
  • 做自己的网站怎么购买空间江门网站建设模板
  • 网站办公室文化建设seo免费优化
  • 做网页推广的网站百度seo营销公司
  • 外贸网站做纸尿裤怎么样网络营销推广活动
  • 雨颜色网站建设做推广怎么赚钱
  • 网站程上传磁力吧
  • 做网站的做app的最新疫情19个城市封城
  • 集团企业网站建设方案策划书营销型外贸网站建设
  • 网站成功案例设计营销软文500字范文
  • 学做网站要学什么软件何鹏seo
  • 宝应网站设计留号码的广告网站不需要验证码
  • 海口专门做网站自己代理一款手游需要多少钱
  • 哈尔滨工程建设信息网官网开封网站优化公司
  • 网站建设包括什么科目全网关键词搜索工具