美文网首页
[swift 进阶]读书笔记-第十一章:互用性 C11P2 低

[swift 进阶]读书笔记-第十一章:互用性 C11P2 低

作者: liaoworkinn | 来源:发表于2019-05-11 15:53 被阅读0次

    第十一章:互用性 Interoperability

    11.2 低层级类型概览 AnOverviewofLow-LevelTypes

    一开始看到低层级类型的时候一脸懵逼。。这个是啥意思,我们这里可以理解成偏底层的类型(个人观点,如有出入谢谢指正。thanks.)

    在swift标准库中有不少类型提供了低层方式来访问内存。
    和底层相关的api或者命名中我们可以通过其命名方式就可以知道大概作用。

    · 含有managed的类型:
    内存是自动管理的。编译器为你申请,初始化并且释放内存。

    · 含有unsafe的类型:
    不提供自动的内存管理(这个managed正好相反)。你需要明确地进行内存申请,初始化,销毁和回收。

    · 含有buffer类型:
    表示作用于一连串的多个元素,而非一个单独的元素上,它也提供了 Collection 的接口。

    · 含有raw类型:
    包含无类型的原始数据,它和C的void*是等价的。在类型名字中不包含raw 的类型的数据是具有类型的。

    · 含有mutable类型:
    允许它指向的内存发生改变。

    指针

    这小段的内容偏C语言,C语言大佬可以微微一笑跳过本小段hhh😄

    除了OpaquePointerType之外,swift 中还有另外八种指针类型,都用来映射 C 中不同的指针。

    这里推荐瞄神关于swift中指针的文章《Swift 中的指针使用》

    知识点1:

    C 中

    const int* (一个指向不可变数据的可变指针)   等效于swift中的UnsafePointer
    
    int* const (一个不可变指针,或者 说,你不能改变这个指针指向的位置) 
    两者是不一样的
    
    知识点2:

    在任意类型正确的可变变量前面加上 & 符号,可以将它们转变 in-out 表达式:

    var x = 5 
    func fetch(p: UnsafePointer<Int>) -> Int {
        return p.pointee 
    }
    
    fetch(p: &x) // 5
    

    有印象的同学是不是想到函数章讲到的in-out表达式6.4 inout参数和可变方法 忘却的同学赶紧回去再补补🐶

    知识点3:

    Swift 中申请内存的方式,其实和C中是很像的。
    1.先申请内存。
    2.初始化。
    3.使用。
    4.不用就释放。

    直接上demo~

    // 申请两个 Int 的内存,并初始化它们
    let z = UnsafeMutablePointer<Int>.allocate(capacity: 2) z.initialize(to: 42, count: 2)
    z.pointee // 42
    //指针计算:
    (z+1).pointee = 43
    //下标:
    z[1] // 43
    //销毁内存
    // 如果被指的是⼀一个⾮非平凡值 (⽐比如类实例例),那么你需要 // 在调⽤用 deallocate 之前先 deinitialize z.deallocate(capacity: 2)
    // 不不要在 deallocate 之后在访问被指向的值
    

    在申请内存后,你必须对其进行初始化,之后 才能使用它。一旦你不再需要这个指针,你需要释放内存。

    over~

    文章源文件地址,大家如果有更好的想法和观点欢迎交流

    相关文章

      网友评论

          本文标题:[swift 进阶]读书笔记-第十一章:互用性 C11P2 低

          本文链接:https://www.haomeiwen.com/subject/mlwxaqtx.html