结构体和枚举都是一种存储复杂的数据。结构体是用户自定义的一种类型,不同类型的集合。

1.结构体的创建及使用

  • 定义结构体类型
struct MyDate {
int year;
int month;
int day;
};
typedef struct MyDate MyDate; //如果不加这句话,每次调用这个MyDate的数据结构时,都需要加上struct 这个类型
  • 结构体的调用
//在需要的地方调用即可
MyDate date = {2017, 7, 21};
NSLog(@"-----year=%d, month=%d, day=%d-----", date.year, date.month, date.day);
  • 结构体数据组装的方法

因为在使用CGSize的时候,size的有个数据组装的方法:CGMakeSize();所以如果也要自己生成这样一个方法时,如下步骤:

--》1.导入头文件  #include <CoreGraphics/CGBase.h>
--》2.CG_INLINE ***结构体(例如:CG_INLINE MyDate)
--》3.自定义组装数据的方法名以及类型,如下:
CG_INLINE MyDate
ZWYLMakeDate(int year, int month, int day) {
struct MyDate date; date.year = year; date.month = month, date.day = day;
return date;
}
  • 组装数据方法的使用
MyDate date = ZWYLMakeDate(2017, 7, 21);
NSLog(@"-----year=%d, month=%d, day=%d-----", date.year, date.month, date.day);
  • oc中常见的结构体有:NSPoint 和 CGPoint; NSSize 和 CGSize;  NSRect 和 CGRect

2.枚举类型的使用

先推荐两篇文章吧,说的确实挺清楚与深入的。

http://blog.csdn.net/daleiwang/article/details/50581872

http://www.jianshu.com/p/97e582fe89f3

这里只举个例子吧:

  • 单个枚举类型的创建
typedef  NS_ENUM(NSInteger, testSingle) {
testSingleOne = 0,
testSingleTwo = 1,
testSingleLitterWay = 2
};
  • 单个枚举类型的使用
/** 单个枚举值的用法 */
- (void)logSingleType:(testSingle)singleType {
NSLog(@"-----%ld %ld %ld-----", singleType & testSingleOne, singleType & testSingleTwo, singleType & testSingleLitterWay); if (singleType == 0) {
NSLog(@"-----0-----");
} if (singleType == 1 ) {
NSLog(@"-----1-----");
} if (singleType == 2 ) {
NSLog(@"-----2-----");
} } //-----调用:例如在viewDidLoad中调用
[self logSingleType:testSingleOne];
  • 多个枚举类型的创建
typedef NS_OPTIONS(NSInteger, testNSEum) {
testNSEumLeft = 1 << 0, //==1
testNSEumRight = 1 << 1, //==2
testNSEumTop = 1 << 2, //==4
testNSEumBottom = 1 << 3, //==8
};
  • 多个枚举类型的使用
/** 多个枚举值组合后的解决方法 */
- (void)logMessage:(testNSEum)type {
NSLog(@"-----%ld %ld %ld %ld-----", type & testNSEumTop , type & testNSEumBottom, type & testNSEumRight, type & testNSEumLeft);
if (type & testNSEumTop ) {
NSLog(@"-----type=testNSEumTop-----");
} if (type & testNSEumBottom) {
NSLog(@"-----type=testNSEumBottom-----");
} if (type & testNSEumRight) {
NSLog(@"-----type=testNSEumRight-----");
} if (type & testNSEumLeft) {
NSLog(@"-----type=testNSEumLeft-----"); } } // 调用--例如在ViewDidLoad调用
[self logMessage:testNSEumLeft | testNSEumBottom | testNSEumRight];

3.结构体与类的区别:

a.    结构体只能封装数据,而类还可以封装行为

b.    结构体变量分配在栈空间(如果是是1个局部变量的情况下),而对象分配在堆空间。

i.        栈的特点:空间相对较小,但是存储在栈中得数据访问的效率稍高一些

ii.        堆的特点:空间的相对较大,但是存储在堆中的数据,效率低一些

iii.        存储在栈中得数据访问效率高, 存储在堆中得数据效率低

oc温习七:结构体与枚举的更多相关文章

  1. C#语言基础——结构体和枚举类型

    结构体和枚举类型 一.结构体(struct) 结构类型是用户自己定义的一种类型,它是由其他类型组合而成的,可包含构造函数.常数.字段.方法.属性.索引器.运算符.事件和嵌套类型的值类型.结构在几个重要 ...

  2. iOS开发——C篇&结构体与枚举

    一:结构体与枚举的介绍: 结构体与枚举:是一种存储复杂的数据结构体:是用户自定义的一种类型,不同类型的集合,而数组是相同类型变量的集合. 二:结构体的创建 struct user {     char ...

  3. OC Foundation框架—结构体

    一.基本知识 Foundation—基础框架.框架中包含了很多开发中常用的数据类型,如结构体,枚举,类等,是其他ios框架的基础. 如果要想使用foundation框架中的数据类型,那么包含它的主头文 ...

  4. swift学习笔记3——类、结构体、枚举

    之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...

  5. c# 函数练习;结构体、枚举类型

       * 结构体 1.就是一个自定义的集合,里面可以放各种类型的元素,用法大体跟集合一样. 注意:枚举类型和结构体都属于值类型. 2.定义的方法: struct student { public in ...

  6. OC中的结构体

    一.结构体 结构体只能在定义的时候进行初始化 给结构体属性赋值    + 强制转换: 系统并不清楚是数组还是结构体,需要在值前面加上(结构体名称)    +定义一个新的结构体,进行直接赋值    + ...

  7. C语言回顾-结构体、枚举和文件

    1.构造类型 根据已经定义的一个或多个数据类型用构造的方法来定义. 分为:数组.结构体和共用体 2.结构体 struct 结构体名{ 成员列表: }; 1)结构体定义完成以后,计算机不会给结构体分配存 ...

  8. swift中的结构体和枚举

    Swift 里的结构体非常特殊. 类是面向对象编程语言中传统的结构单元.和结构体相比,Swift 的类支持实现继承,(受限的)反射,析构函数和多所有者. 既然类比结构体强大这么多,为什么还要使用结构体 ...

  9. c# 结构体、枚举类型及函数调用

    一.结构体 结构体:就是一个自定义的集合,里面可以放各种类型的元素,用法大体跟集合一样. 枚举类型和结构体都属于值类型. 二.枚举类型 1.枚举类型之针对字符串,对于索引,无意义2.常量的集合,这些常 ...

随机推荐

  1. MongoDB最简单的入门教程之三 使用Java代码往MongoDB里插入数据

    前两篇教程我们介绍了如何搭建MongoDB的本地环境: MongoDB最简单的入门教程之一 环境搭建 以及如何用nodejs读取MongoDB里的记录: MongoDB最简单的入门教程之二 使用nod ...

  2. flask_SQLAlchemy 中常用的过滤和执行器

    常用的SQLAlchemy查询过滤器 过滤器 说明 filter() 把过滤器添加到原查询上,返回一个新查询 filter_by() 把等值过滤器添加到原查询上,返回一个新查询 limit 使用指定的 ...

  3. uva1352 Colored Cubes LA3401

    白书第一章例题8 好麻烦! 正方体每面编号为0-5,那么根据顶点和正面,就能确定形态.一共6*4=24种形态. P[i]表示编号i所在位置.比如P[1]=3,表示第二面转到了第四面. 就可以表示出所有 ...

  4. b继承a的函数

    var cls={ my:, init:function() { alert(this.my.a); }};window.onload=function(){ cls.init();} 调用cls.i ...

  5. python基础一 day6 文件操作

    读写只会进行两步, r+模式下写读 seek是按字节去找的 for line in f: for循环是一行一行的读取出来 strip默认去空格和换行符 空格.制表符.换行符.回车.换页垂直制表符和换行 ...

  6. 【php】查看扩展的版本

    php --ri [扩展名称] 例如: php --ri mongodb mongodb MongoDB support => enabled MongoDB extension version ...

  7. PyTorch的十七个损失函数

    本文截取自<PyTorch 模型训练实用教程>,获取全文pdf请点击: tensor-yu/PyTorch_Tutorial​github.com 版权声明:本文为博主原创文章,转载请附上 ...

  8. Mysql 一对多关系建立(在navicat中)

    一个孩子只有一个妈妈,而一个妈妈可以有多个孩子,这是典型的一对多的关系,这里采用navicat图形化界面建立二者的关系. 第一步:创建mother表,如下图: 第二步:创建children表,在chi ...

  9. docker使用阿里云镜像仓库docker

    1:阿里云docker仓库 https://dev.aliyun.com/search.html 2:进去注册帐号后,点击自己的管理中心. 3:在管理中心点击加速器,右边面板会有你的加速地址,右边面板 ...

  10. kvm的4中网络模型(qemu-kvm)

    1. 隔离模式(类似vmare中仅主机模式):虚拟机之间组建网络,该模式无法与宿主机通信,无法与其他网络通信,相当于虚拟机只是连接到一台交换机上,所有的虚拟机能够相互通信. 2. 路由模式:相当于虚拟 ...