zoukankan      html  css  js  c++  java
  • Swift-05-SizeOf&&SizeOfValue

      在C中定义的运算符,可以作用于类型或者某个实际的变量,并返回其在内存中的尺寸size_t.

      在Cocoa中,我们一般用来将数组生成NSData的时候传入数据长度。因为在OC里面,sizeOf这个C运算符被保留了。

    char bytes[] = {1, 2, 3};  
    NSData *data = [NSData dataWithBytes:&bytes length:sizeof(bytes)]; 
    

      C中的sizeOf有两个版本,既可以接受类型,也可以接受某个具体的值。

      sizeOf(int)

      sizeOf(a)

      在Swift中,为了保证类型安全,sizeOf经过了一层包装,它不再是运算符,而是一个只能接受类型的方法。

      我们还可以找到一个接受具体值,并返回尺寸的方法:sizeOfValue.这个方法返回的是Int,不是size_t。

    var bytes:[CChar] = [1,2,3]
    sizeofValue(bytes)
    print(sizeofValue(bytes))----》8
    

      虽然SizeofValue接受的是具体是,但是它和C的接收具体值的版本的sizeof行为并不相同。sizeofValue所返回的是这个值实际的大小,而并非其内容的大小。

      如果我们在Swift中想表示上面的bytes的话,我们会将其类型写为CChar。在C或者OC中,对bytes做sizeof返回的是整个数组内容在内存中占据的尺寸。每个char为1,而数组元素为3,因此这个值是3.在Swift中,我们如果直接对bytes做sizeofValue操作的话,将返回8。

    var bytes32:[CChar] = [1,2,3]
    print(sizeofValue(bytes32))
    

      

    var bytes44:[CChar] = [1,2,3]
    let data = NSData(bytes: &bytes44, length: sizeof(CChar) * bytes44.count)
    print(data)
    

      

    print(sizeof(UInt16))
    print(sizeof(MyEnum))
    print(sizeofValue(MyEnum.A))
    print(sizeofValue(MyEnum.A.rawValue))
    
    2
    1
    1
    2
    

      没有咋看懂。

  • 相关阅读:
    String类
    数学类
    同一场景下多个图层之间的调用
    茶壶在触摸机制下旋转的三种方式
    犀牛3D模型下载
    纹理--高清设计素材下载
    cocos2d-x-2.x与3.x帧动画实现方式的改变
    toast提示框的实现
    MenuItem创建注意事项
    Cocos2d-x 面试题解 整理01
  • 原文地址:https://www.cnblogs.com/tanglimei/p/5132638.html
Copyright © 2011-2022 走看看