OutMan——Foundation框架中的常用结构体、NSNumber类和NSValue类

本文详细介绍了Foundation框架中的常用结构体,包括NSRange、NSPoint/CPoint、NSSize/CGSize和NSRect/CRect的定义、使用及转换。同时,探讨了NSNumber和NSValue的区别和用法,它们在数据包装和转换中的作用,以及在iOS开发中的重要性。

Foundation框架中的常用结构体

  • NSRange
  • NSPoint / CGPoint
  • NSSize / CGSize
  • NSRect / CGRect

Foundation框架

  1. Foundation框架,正如其名,它是所有IOS框架的基础
  2. Foundation框架中包含了很多开发中常用的数据类型
  3. 要想使用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对象中提取数值,提取的数值存放在这个指针所指向的内存块里


                                        —— 如果您有不同的见解,请随时指出,期待与您的交流!——


根据原作 https://pan.quark.cn/s/0ed355622f0f 的源码改编 野火IM解决方案 野火IM是专业级即时通讯实时音视频整体解决方案,由北京野火无限网络科技有限公司维护支持。 主要特性有:私有部署安全可靠,性能强大,功能齐全,全平台支持,开源率高,部署运维简单,二次开发友好,方便与第三方系统对接或者嵌入现有系统中。 详细情况请参考在线文档。 主要包括一下项目: 野火IM Vue Electron Demo,演示如何将野火IM的能力集成到Vue Electron项目。 前置说明 本项目所使用的是需要付费的,价格请参考费用详情 支持试用,具体请看试用说明 本项目默认只能连接到官方服务,购买或申请试用之后,替换,即可连到自行部署的服务 分支说明 :基于开发,是未来的开发重心 :基于开发,进入维护模式,不再开发新功能,鉴于已经终止支持且不再维护,建议客户升级到版本 环境依赖 mac系统 最新版本的Xcode nodejs v18.19.0 npm v10.2.3 python 2.7.x git npm install -g node-gyp@8.3.0 windows系统 nodejs v18.19.0 python 2.7.x git npm 6.14.15 npm install --global --vs2019 --production windows-build-tools 本步安装windows开发环境的安装内容较多,如果网络情况不好可能需要等较长时间,选择早上网络较好时安装是个好的选择 或参考手动安装 windows-build-tools进行安装 npm install -g node-gyp@8.3.0 linux系统 nodej...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值