Swift里字符串(六)Shared strings
Shared strings do not have tail-allocated storage, but can provide access upon query to contiguous UTF-8 code units. Lazily-bridged NSStrings capable of providing access to contiguous ASCII/UTF-8 set the ObjC bit. Accessing shared string's pointer should always be behind a resilience barrier, permitting future evolution.
字符串数据没有从内部_object处起始,但是可以获取连续的 utf-8 code unit。
对应的类是__SharedStringStorage。
内存布局
 

在 OC runtime下,是 NSString 子类
 

子类化 NSString
#if _runtime(_ObjC)
  @objc(length)
  final internal var length: Int {
    @_effects(readonly) get {
      return asString.utf16.count // UTF16View special-cases ASCII for us.
    }
  }
  @objc(characterAtIndex:)
  @_effects(readonly)
  final internal func character(at offset: Int) -> UInt16 {
    let str = asString
    return str.utf16[str._toUTF16Index(offset)]
  }
  @objc(getCharacters:range:)
  @_effects(releasenone)
  final internal func getCharacters(
    _ buffer: UnsafeMutablePointer<UInt16>, range aRange: _SwiftNSRange
  ) {
    _getCharacters(buffer, aRange)
  }
Swift里字符串(六)Shared strings的更多相关文章
- Swift 里字符串(四)large sting
		对于普通的字符串,对应的_StringObject 有两个存储属性: _countAndFlagsBits: UInt64 _object: Builtin.BridgeObject _countAn ... 
- Swift 里字符串(一)概览
		感受一下字符串相关的源文件个数  String 概览 是一个结构体 只有一个变量,类型是 _StringGuts  如上所示,String 真正的内容在__StringStorage或者__Sha ... 
- Swift里字符串(五)Native strings
		Native strings have tail-allocated storage, which begins at an offset of nativeBias from the storage ... 
- Swift 里字符串(十)修改字符串
		以append操作为例 public mutating func append(_ other: String) { if self.isEmpty && !_guts.hasNati ... 
- [Swift]LeetCode43. 字符串相乘 | Multiply Strings
		Given two non-negative integers num1 and num2 represented as strings, return the product of num1and ... 
- Swift 里字符串(七)stringIndex
		在 String 里,用来索引 Character 的,不是整数,而是StringIndex 内部结构 extension String { /// A position of a character ... 
- Swift 里字符串(三)small String
		 small string, 只有两个 UInt64 的字,这里面存储了所有的信息. 内存布局如下:  第二个 UInt64 存储了标记位和长度信息,以及部分字符串的值 // Get an int ... 
- [Swift]LeetCode415. 字符串相加 | Add Strings
		Given two non-negative integers num1 and num2 represented as string, return the sum of num1 and num2 ... 
- Swift 里字符串(十一)OC 字符串和 Swift 字符串的转换
		 to OC func _bridgeToObjectiveCImpl() -> AnyObject { if _guts.isSmall { return _guts.asSmall.wit ... 
随机推荐
- MessagePack 使用
			MessagePack 使用 MessagePack(https://msgpack.org/) 是一个基于二进制高效的对象序列化 Library 用于跨语言通信.它可以像 JSON 那样,在许多种语 ... 
- Memocache
			http://blog.csdn.net/zhoufoxcn/article/details/6282099 http://blog.csdn.net/dinglang_2009/article/de ... 
- HttpClient的几个实现类
			DefaultHttpClient最基本的HttpClient实现 org.apache.http.impl.client.DefaultHttpClient占用内存23字节 第一次初始化的时候需要2 ... 
- PLSQL 块demo
			DECLARE v_servid NUMBER(16); v_stdno VARCHAR2(30); BEGIN FOR i IN (SELECT rownum rn, t.* ... 
- cocos2d-x 3.4版本,videoPlayer和webView上添加sprite等cocos控件
			本帖源于小弟自己在项目过程中为了解决在cocos2d-x中实现ios里videoPlayer自定义控件的需求,所以挖出来大神的一个帖子http://www.cocoachina.com/bbs/rea ... 
- Shell 基本语法
			一. Linux基本命令 1.1. cp命令 该命令的功能是将给出的文件或目录拷贝到另一文件或目录中,功能十分强大. 语法: cp [选项] 源文件或目录 目标文件或目录 1.2. mv命令 用户可 ... 
- IntelliJ IDEA 2017版 编译器使用学习笔记(三) (图文详尽版);IDE快捷键使用
			一.列操作 功能:操作多行列执行相同的功能,达到一次修改多行同类型数据的情况,如图: Json字符串,转为枚举类的字段: 首先进行,快捷键一行快速操作 1.选中命令,s ... 
- SDK | 声波传输
			SDK | 声波传输 - 音频流生成 https://github.com/CloudSide/WaveTransSdk/tree/master/c/freq_util Objective-C: ht ... 
- hdu1251 && hud 1247 (字典树)
			hdu1251 题目 这道题,主要是在主函数的输入输出上犹豫了. #include<stdio.h> #include<cstring> #include<iostrea ... 
- ploymer
			developer guide 接下来看声明属性 声明属性 声明属性时,可设定的参数 type:属性反序列化 value:[function(){}],配置属性默认值 readonly refle ... 
