OutMan——Foundation框架中的常用结构体、NSNumber类和NSValue类
Foundation框架中的常用结构体
- NSRange
- NSPoint / CGPoint
- NSSize / CGSize
- NSRect / CGRect
Foundation框架
- Foundation框架,正如其名,它是所有IOS框架的基础
- Foundation框架中包含了很多开发中常用的数据类型
- 要想使用Foundation框架中的数据类型,只需要包含它的主头文件即可 #import < Foundation/Foundation.h >
NSRange
一、NSRange的简介
1. NSRange是一个用来表示范围的结构体,这个结构体中有两个成员,NSUInteger类型的location和NSUInteger类型的length
2. location用来表示位置,length用来表示长度
3. NSRange类型结构体的定义
struct_NSRange
{ NSUInteger location;NSUInteger length;
} NSRange;
二、NSRange的使用
<1> 给NSRange结构体变量赋值的几种方式:
// 先定义结构体变量再赋值
NSRange r;
r.location = 0;
r.length = 10;
// 先定义结构体变量再赋值
NSRange r2;
r2 = (NSRange){0, 10};
// 定义结构体变量的时候直接赋值
NSRange r3 = {0,10};
NSRange r4 = {.length = 10, .location = 0};
// 定义结构体变量的常见方式
NSRange r5 = NSMakeRange(0, 10);
-使用注意:
1. 开发中我们一般使用NSMakeRange( )函数来给NSRange结构体变量赋值
<2> NSRange的简单使用:
(1)查找@“believe”在字符串@“I believe I can fly”中的位置
- 使用注意:
1. 如果如果查找到了,返回所在范围
2. 如果没有查找到,返回的范围length为0,location为NSNotFound
3. NSNotFound,%lu输出的话是unsigned long类型的最大数922337203685477580
7,如果%d输出的话是-1
(2)将NSRange类型的结构体变量转换成字符串,通过这种方式也可以查看NSRange类型变量中的值
NSPoint / CGPoint
一、NSPoint / CGPoint的简介
1. NSPoint / CGPoint是一个用来表示二维平面上的点的结构体,这个结构体中有两个成员,CGFloat类型的x和CGFloat类型的y
2. CGFloat类型的定义:
typedef float CGFloat;
CGFloat类型其实就是double类型
3. x用来表示点的x轴位置,y用来表示点的y轴位置
4. NSPoint类型的定义:
typedef struct _NSPoint
{CGFloat x;CGFloat y;
} NSPoint;
5. CGPoint类型的定义:
struct CGPoint
{CGFloat x;CGFloat y;
};
typedef struct CGPoint CGPoint;
二、NSPoint / CGPoint的使用
<1> 如何表示二维平面上的一个点:
// 如何表示二维平面上x轴为10,y轴为5的一个点
NSPoint p = NSMakePoint(10, 5);
CGPoint p2 = CGPointMake(10, 5);
<2> 将结构体转换为字符串:
- 使用注意:
1.
typedef CGPoint NSPoint;
NSPoint类型就是CGPoint类型
<3> 比较两个点是否相同:
NSSize / CGSize
一、NSSize / CGSize的简介
1. NSSize / CGSize是一个用来表示平面尺寸的结构体,这个结构体中有两个成员,CGFloat类型的width和CGFloat类型的height
2. CGFloat类型的定义:
typedef float CGFloat;
CGFloat类型其实就是double类型
3. width用来表示宽度,heigth用来表示高度
4. NSSize类型的定义:
typedef struct _NSSize
{CGFloat width;CGFloat height;
} NSSize;
5. CGSize类型的定义:
struct CGSize
{CGFloat width;CGFloat height;
};
typedef struct CGSize CGSize;
二、NSSize / CGSize的使用
<1> 如何表示一个平面尺寸:
// 如何表示一个宽度为9,高度为10的平面尺寸
NSSize s = NSMakeSize(9, 10);
CGSize s1 = CGSizeMake(9, 10);
<2> 将结构体转换为字符串:
- 使用注意:
1.
typedef CGSize NSSize;
NSSize类型就是CGSize类型
<3> 比较两个平面尺寸是否相同:
NSRect / CGRect
一、NSRect / CGRect的简介
1. NSRect / CGRect是一个用来表示左上角为某个点的矩形区域的结构体,这个结构体中有两个成员,NSPoint类型的origin和NSSize类型的size
2. origin用来表示起始点,size用来表示矩形大小
3. NSRect类型的定义:
typedef struct _NSRect
{NSPoint origin;NSSize size;
} NSRect;
4. CGSize类型的定义:
struct CGRect
{CGPoint origin;CGSize size;
};
typedef struct CGRect CGRect;
二、NSSize / CGSize的使用
<1> 如何表示一个左上角为某个点的矩形区域:
// 如何表示一个左上角为点(2,3),宽度为10,高度为5的一个矩形区域
// 常见方式
NSRect r = NSMakeRect(2, 3, 10, 5);
CGRect r2 = CGRectMake(2, 3, 10, 5);
// 其他表示方式
CGRect r3 = {{2,3}, {10, 5}};
CGRect r4 = {CGPointMake(2, 3), CGSizeMake(10, 5)};CGPoint p = CGPointMake(2, 3);
CGSize s = CGSizeMake(10, 5);
CGRect r5 = {p, s};
<2> 将结构体转换为字符串:
- 使用注意:
1.
typedef CGRect NSRect;
NSRect类型就是CGRect类型
<3> 比较两个矩形区域是否相同:
Foundation框架中的结构体使用注意
一、Foundation框架中的结构体使用注意:
1. CGPointZero 表示原点
CGPointZero == CGPointMake(0, 0)
2. CGSizeZero == CGSizeMake(0, 0)
3. CGRectZero == CGRectMake(0, 0, 0, 0)
二、判断一个矩形范围内是否包含某个点
NSNumber和NSValue
- NSNumber:只能将数字包装成NSNumber对象(子类)
- NSValue:任何东西(结构体,枚举,指针,数字)都能够包装成NSValue对象(父类)
- NSNumber之所以能包装基本数据类型为对象,是因为NSNumber类继承了NSValue类
NSNumber
一、如何将数字包装成NSNumber对象
<1>将各种数据类型包装成NSNumber对象的常见方法
// 将int类型数据10包装成一个NSNumber对象
NSNumber *num = [NSNumber numberWithInt:10];
// 将char类型数据'A'包装成一个NSNumber对象
NSNumber *num2 = [NSNumber numberWithChar:'A'];
// 将float类型数据3.14f包装成一个NSNumber对象
NSNumber *num3 = [NSNumber numberWithFloat:3.14f];
// 将double类型数据1.123456包装成一个NSNumber对象
NSNumber *num4 = [NSNumber numberWithDouble:1.123456];
// 将BOOL类型数据YES包装成NSNumber对象
NSNumber *num5 = [NSNumber numberWithBool:YES];
<2>将各种数据类型快速包装成NSNumber对象
// 将int类型数据10包装成一个NSNumber对象
NSNumber *num = @10;
// 将char类型数据'A'包装成一个NSNumber对象
NSNumber *num2 = @'A';
// 将float类型数据3.14f包装成一个NSNumber对象
NSNumber *num3 = @3.14f;
// 将double类型数据1.123456包装成一个NSNumber对象
NSNumber *num4 = @1.123456f;
// 将BOOL类型数据YES包装成NSNumber对象
NSNumber *num5 = @YES;
二、如何将数字存储在数组或字典中
1. 先将数字包装成NSNumber对象
2. 然后再将包装后的对象存放在数组或字典中
三、如何将NSNumber对象转为对应的基本类型数据
四、如何将一个变量包装成NSNumber对象
// 先定义一个char类型的变量
char c = 'L';
// 将char类型变量c包装成NSNumber对象
// 方式一:
NSNumber *num =[NSNumber numberWithChar:c];
// 方式二:
NSNumber *num2 = @(c);
-使用注意:
1. 如果使用@( 变量名 )将一个变量包装成NSNumber对象,必须加上小括号,小括号( )的作用是取值,然后在通过@包装
NSValue
一、将常见的结构体包装成NSValue对象
<1> 将NSRange结构体包装成NSValue对象
<2> 将NSPoint / CGPoint结构体包装成NSValue对象
<3> 将NSSize / CGSize结构体包装成NSValue对象
<4> 将NSRect / CGSize结构体包装成NSValue对象
二、将NSValue对象转为对应的常见结构体
<1> 将NSValue对象转为NSRange结构体
<2> 将NSValue对象转为NSPoint / CGPoint结构体
<3> 将NSValue对象转为NSSize / CGSize结构体
<4> 将NSValue对象转为NSRect / CGSize结构体
三、如何将自定义类型的结构体变量包装成对象
- 使用注意:
1. valueWithBytes: 变量地址
2. objCType:通常是一个用来描述变量类型和大小的字符串
3. @encode(类型)作用:可以返回该类型的c字符串的表示
@encode(Date)的作用:把Date类型生成一个常量字符串描述
4. getValue:变量地址
从接受的NSValue对象中提取数值,提取的数值存放在这个指针所指向的内存块里
—— 如果您有不同的见解,请随时指出,期待与您的交流!——
OutMan——Foundation框架中的常用结构体、NSNumber类和NSValue类相关推荐
- oc基础-foundation框架中的常用结构体
1.CGPoint/NSPoint :表示坐标点的 创建: CGPoint *cp=NSMakePoint(10,10); //x,y NSPonit *cp=CGPointMake(10,10); ...
- Objective-C( Foundation框架 一 常见的结构体)
常见的结构体 (NSPoint,CGPoint).(NSRange,CGRange).(NSSize,CGSize) 苹果官方推荐使用CG开头的结构体 NSRange是Foundation框架中常见的 ...
- Android系统源码分析/多媒体框架/音频子系统/常用结构体分析-audio.h
audio_stream_type_t 定义音频流类型,主要是手机系统各类典型的音频流做出属性上的区分,举个例子:电话和媒体2种类型的音频不管从输出的设备(耳机.功放.还是蓝牙)都是存在明显的不同.把 ...
- Objective-C基础笔记(7)Foundation中的常用结构体
一.NSRange NSRange的定义: typedef struct _NSRange {NSUInteger location;NSUInteger length; } NSRange; NSR ...
- Foundation框架中常用类的介绍
http://blog.csdn.net/mengtnt/article/details/6087536 Foundation框架的架构 cocoa程序编写主要用到2个框架Foundation和App ...
- ffmpeg源码简析(十二)FFMPEG中的主要结构体总结
FFMPEG中结构体很多.最关键的结构体可以分成以下几类: a) 解协议(http,rtsp,rtmp,mms) AVIOContext,URLProtocol,URLContext主要存储视音频使用 ...
- Swift 中枚举、结构体、类(enum、struct、class)
Swift 中枚举.结构体.类(enum.struct.class) Swift中的枚举与OC相比不会自动分配初始值,值的类型不会限定为整数,可以给定关联值类型和具体值(整型.浮点型.字符型(Swif ...
- 函数体中定义的结构体和类型
源代码: 1 #include <stdio.h> 2 struct smonth // point 1 3 { 4 int a; 5 int b; 6 }; 7 8 int func1( ...
- (转载)OC学习篇之---Foundation框架中的NSDirctionary类以及NSMutableDirctionary类
昨天学习了Foundation框架中NSArray类和NSMutableArray类,今天来看一下Foundation框架中的NSDirctionary类,NSMutableDirctionary类, ...
- Python中定义(声明)结构体
文章目录 前言 实现 前言 在Python中并无像C/C++那样的结构体类型,但是由于Python是用C编写而来的,很多东西可以互通. Python是有struct模块,但并非是用于处理一般结构体的, ...
最新文章
- 梁云 北大 计算机,北京大学信息技术高等研究院
- NOIP 2014 联合权值
- Djangosocket简单实现django简化版
- ajax 网络延迟 异步,利用 jQuery 的 Ajax 来实现检查网络延迟多少秒
- Steinberg Cubase Elements 11 for Mac(音频处理软件)
- 【老罗笔记】哪来的天才——练习中的平凡与伟大
- Windows 10免费升级
- Torch中的benchmarkdeterministic是什么含义?
- 字体图标在服务器上显示不出来,fontawesome图标字体库组件在服务器上显示不出来图标的解决...
- java缓存击穿_对缓存击穿的一点思考
- postman设置前置条件
- 关于CGI的一些认识
- postgres锁表怎么解决
- 设顺序表va中的数据元素递增有序。先实现将x插入到顺序表的适当位置上,保存该表的有序性。
- react中的双向绑定
- 贪心算法1——找零钱问题
- linux多线程调试
- 第二十六章 数论——欧拉函数(详解与证明)
- Verilog“七宗罪”
- Python之字典与集合的基本操作
热门文章
- 江苏省职称计算机word2003教材,[205]Word 2003中文字处理 考试大纲
- Java面试题精选四(oracle、mysql数据库)
- mashang6.edu.cn
- 为了防止世界被破坏,春运的抢票攻略在等着你们
- Sugar BI数据可视化图表标注
- autoit3 自动安装QQ音乐【版本QQMusicV7.96.2062.0525】
- 那些著名的黑客事件 五
- python计算工资工时_Python实现扣除个人税后的工资计算器示例
- 公共IPV6 dns大全
- 北大MBA夫妇不满现有教育系统 携女隐居终南山