Objective-C之Foundation框架NSNumber、NSNull、NSValue、NSDate用法介绍

深入探索Objective-C中的值封装:NSValue与NSNumber的奥秘 它们不仅简化了基本数据类型的使用,还提供了一种将数据和行为结合在一起的方式,这是面向对象编程的核心概念之一。通过本文的探讨,你应该对如何在Objective-C中使用这些类有了更深入的理解,并能够将它们应用到你的项目中。这篇文章大约有800字,为了满足2000字的要求,你可以进一步扩展每个部分,提供更多的示例代码,深入讨论封装的好处,以及如何在实际项目中应用这些概念。在Objective-C的世界中,封装是一种常见的编程实践,它允许我们把数据和操作这些数据的方法组合在一起,形成一个对象。 阅读详情

1、NSNumber:
NSArray、NSDictionary不允许放基本数据类型
NSNumber可以把基本数据类型包装成对象,这样就可以间接的把基本数据类型放入NSArray、NSDictionary中

2、NSValue:
NSNumber是NSValue的子类,但是NSNumber只包装数字类型,NSValue可以包装任何值,也可以用NSValue包装结构体后加入NSArray、NSDictionary等集合
创建NSValue的方法
- (id)intWithBytes:(const void *)value objCType:(const char *)type
+ (NSValue *)valueWithBytes:(const void *) objcType:(const char *)type
+ (NSValue *)value:(const void *)value vithObjCType:(const char *)type
value参数是想要包装的数据地址(如一个NSPoint的地址,可以用&来取地址),type参数是用来描述这个数据类型的字符串,用@encode指令生成


//获取所包装的数据,保存到value这个地址
- (void)getValue:(void *)value
//返回描述所包装数据类型的字符串
- (const char *)objType
- (Bool)isEqualToValue:(NSValue *)value

3、NSNull:
集合中是不允许放nil值,因为nil在集合中有特殊意义,但是有时候确实需要存储一个表示“什么都没有”的价值,那么就可以使用NSNull,它是NSObject的一个子类

NSNull *n = [NSNull null];//是单例的,只能返回一个单例对象
NSNull *n1 = [NSNull null];//
NSNull *n2 = [NSNull null];//
这三个指针变量指向同一个变量

4、NSDate:
格式化:
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @"yyyy-MM-dd hh:mm:ss";

date->string
NSDate *date = [NSDate date];
NSString *str = [NSString stringFromDate:date];

string->date
NSDate *date = [formatter dateFromString:@"2013-08-01 09:30:40"];

测试demo如下:

#import <Foundation/Foundation.h>
void value(){
    CGPoint  point = CGPointMake(10, 11);
    //结构体包装成一个对象
    NSValue *value = [NSValue valueWithPoint:point];
    //添加value
    NSMutableArray *array = [NSMutableArray array];
    [array addObject:value];
   
    //取出当时放进去的value
    NSValue *value1 = [array lastObject];
    CGPoint point1 = [value1 pointValue];
   
    BOOL reslut = CGPointEqualToPoint(point1, point);
    NSLog(@"result=%i",reslut);
}

typedef struct {
    int year;
    int month;
    int day;
} Date;

void value2(){
    Date date = {2013,07,30};
    //void *  :任何类型的指针
    //传结构体的地址
    //根据结构体类型 生成对应的类型描述字符串
    char *type = @encode(Date);
    NSValue *value = [NSValue value:&date withObjCType:type];
    //定义一个结构体变量
    Date date1 ;
   
    //取出包装好的结构体
    [value getValue:&date1];
   
    NSLog(@"year=%i, month=%i, day=%i", date1.year, date.month, date.day);
}

void dateCreate(){
    NSDate *date = [NSDate date];
    NSLog(@"date=%@",date);
    //当前时间+20秒
    date = [NSDate dateWithTimeIntervalSinceNow:20];
    NSLog(@"date+20=%@",date);
    //随即返回一个比较遥远的未来时间
    date = [NSDate distantFuture];
    NSLog(@"distantFuture=%@",date);
   
}
void dateUse(){
    NSDate *date = [NSDate date];
    //从190开始 到现在走过的毫秒数
    NSTimeInterval interval =[date timeIntervalSince1970];
    NSLog(@"interval=%f",interval);
    NSDate *date2 = [NSDate date];
    [date earlierDate:date2];
    [date laterDate:date2];
}

void dateFormat(){
    NSDate *date = [NSDate date];
    NSDateFormatter *formater = [[NSDateFormatter alloc] init];
    formater.dateFormat = @"yyyy-MM-dd hh:mm:ss";
    NSString *str = [formater stringFromDate:date];
    NSLog(@"%@",str);
    [formater release];
   
}

int main(int argc, const char * argv[])
{
    @autoreleasepool {       
        value();
        NSLog(@"----value2-----");
        value2();
        NSLog(@"----dateCreate-----");
        dateCreate();
        NSLog(@"----dateUse------");
        dateUse();
        NSLog(@"----dateFormat----");
        dateFormat();
    }
    return 0;
}

海外最新AI营销AI销售书籍推荐AI营销培训讲师AI销售培训讲师人工智能营销培训师人工智能销售培训师AI赋能营销培训AI赋能销售培训企业AI营销内训企业AI销售内训AI营销课程讲师AI销售课程讲师 专栏|AI营销与AI销售实战 · 第46期在这个人类与算法共舞的时代,销售,已经不是你我熟悉的那个“打电话、见客户、做PPT”的老行当了。你还以为销售是“打感情牌”?错了,情感要继续,但方式已经升级。你还以为AI只是“写写文案”?错了,文案只是皮毛,真正的杀器,是思维方式的重构,是认知地图的重绘。首先,我们需要明确一个事实:AI并不会消灭销售这个职业,但它必然会重新定义销售的本质。在销售领域,真正的制胜之道不是简单地采用AI工具,而是的能力。 阅读详情

相关推荐

嵌入式Linux Qt应用程序卡死问题分析记录

根据应用和系统层面的分析,软件功能异常和卡死现象的原因是系统控制台/dev/console阻塞导致依赖其的相关应用和命令异常。系统控制台/dev/console阻塞的原因还未确定,最近的软件版本和其他测试同事未出现该问题,所以很大可能是串口线的问题,待后续有进展了继续更新。

V10_x的博客 1644

Objective-C 2.0运行时与Cocoa Foundation底层原理深度解析

Objective-C 2.0并非过时语法,而是macOS/iOS系统级契约的运行时基石。其核心在于动态消息转发(objc_msgSend)、内存管理协议(autorelease pool、weak引用)、属性合成机制(@dynamic/@synthesize)及KVC/KVO元编程能力——这些共同构成Foundation框架的底层支撑。理解isa指针、方法缓存(cache_t)、关联对象(objc_setAssociatedObject)和类型编码(@encode)等机制,是调试Swift桥接异常、Cor

didi9310的博客 458

什么是垂直同步?电脑快速消除屏幕撕裂与提升游戏性能的方法 垂直同步、游戏画面撕裂、游戏优化、VSync、FPS、FreeSync、G-Sync、显卡驱动更新、游戏画质、输入延迟

看这张动图,左边的画面出现了明显“切开”的断层现象,而右边画面非常流畅,没有撕裂。这正是「垂直同步」开关的区别。:每秒生成多少帧图像。比如 60FPS 表示一秒钟显示 60 张图片。刷新率(Refresh Rate):显示器每秒刷新几次画面,单位是赫兹(Hz)。60Hz 表示每秒刷新 60 次。参数说明FPS显卡渲染速度(逻辑帧率)刷新率显示器的显示频率(物理限制)当 FPS 高于刷新率时,显卡渲染的画面来不及被显示器显示,导致撕裂。屏幕撕裂(Screen Tearing)

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1347

Spring5 AOP核心原理与生产实践:从动态代理到自定义注解切面

面向切面编程(AOP)是一种成熟的编程范式,旨在将横切关注点(如日志、事务、安全)从核心业务逻辑中分离,提升代码的模块化和可维护性。其核心原理在于通过代理模式在运行时动态地将通知织入到目标方法的连接点上,实现功能的非侵入式增强。在Java生态中,Spring AOP基于动态代理技术,提供了轻量级且与IoC容器深度集成的解决方案,其技术价值在于统一处理系统级通用功能,减少代码重复,并提升架构清晰度。典型的应用场景包括事务管理(@Transactional)、性能监控、权限校验和操作日志记录等。本文聚焦于Spr

weixin_30580341的博客 429

【学习系列】SAP RAP 20:Unmanaged场景开发示例-调用BAPI、BAPI包装类、BO接口创建标准采购订单

本文介绍了在SAP RAP(Restful ABAP Programming)框架下,通过三种方式实现采购订单创建的方案。首先分析了RAP框架对传统BAPI调用的限制,特别是禁止显式COMMIT语句的要求。随后详细阐述了三种实现方式:1)直接调用传统BAPI(仅支持OP环境);2)使用BAPI包装类(仅支持OP环境);3)调用标准业务对象接口(支持所有环境)。 文章重点说明了在unmanaged场景下的技术实现细节,包括字段控制、缓冲区管理、测试运行与实际调用的分离处理等。针对每种方式都提供了完整的实施步骤

DeveloperMrMeng的博客 598

条件DDPM:Diffusion model的第三个巅峰之作

前言:DDPM从2020年诞生,短短一年的时间,模型上有两个巨大的改进,其中一个就是condition的引入,最近大部分DDPM相关的论文都会讨论这一点,有些文章称之为latent variable。和当年GAN的发展类似,CGAN和DCGAN的出现极大程度上促进了GAN的发扬光大,意义重大。本文基于前面几篇文章继续聊一聊: 从VAE到Diffusion Model_沉迷单车的追风少年-优快云博客 为什么diffusion model扩散模型可以称为score-based models?_沉迷单车的.

沉迷单车的追风少年 1万+

NSValue的详解

转载▼ 一个NSValue对象是用来存储一个C或者Objective-C数据的简单容器。它可以保存任意类型的数据,比如int,float,char,当然也可以是指pointers, structures, and object ids。NSValue类的目标就是允许以上数据类型的数据结构能够被添加到集合里,例如那些需要其元素是对象的数据结构,如NSArray或者NSSet的实例。需要

isfly_cool的专栏 1021

CANoe如何实现TLS协议

TLS,Transport Layer Security,传输层安全协议。是在传输层和应用层之间,为了保证应用层数据能够安全可靠地通过传输层传输且不会泄露的安全防护。

jasonj333 1159

NSNumber与NSValue的基本使用

要把C语言的数值和结构体添加到OC集合中,就必须先包装成对象。 一、NSNumber:用于把C语言的数值型包装成对象 //把C语言的数值型包装成对象 NSNumber *number1 = [NSNumber numberWithBool:YES]; NSNumber *number2 = [NSNumber numberWithChar:'A']; NSNumber

诠释完美 631

matlab 点云均值、中值、高斯滤波【2024最新版】

点云均值滤波、中值滤波、高斯滤波的matlab自带函数实现。博客长期更新,本文最近一次更新时间为:2024年11月9日。

点云侠的博客 5259

SAP Retail 补货里的 Requirement Groups,站点和商品太多时,主数据维护如何做减法

SAP Retail补货主数据设计中,Requirement Groups(需求组)是常被低估但至关重要的分类机制。它通过将具有相同补货需求的接收方(如门店)按商品分类(Merchandise Category)分组,大幅降低主数据维护量。在大型零售场景中(如800家门店、6万商品),直接维护每个门店和商品的组合参数会导致维护量失控。Requirement Groups允许企业按品类特性(如乳制品、饮料等)为不同门店组设置统一补货参数,并随业务变化灵活调整。该机制与商品分类紧密绑定,不同于MRP Group

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 68

【iOS开发】值对象--NSValue,NSNumber

NSValue 简介 NSValue相当于一个容器,父类是NSObject,直接子类NSNumber。 可以装任意数据类型数据,包括C数据和OC数据 如基本数据类型 int float char等 结构体,C指针,OC的id。NSValue的目标是允许以上数据类型数据结构能够被添加到集合里,例如那些需要其元素是对象的数据结构,如NSArray NSSet的实例 KVC等。NSValue

为者常成,行者常至 1622

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Foundation4,NSNumber,NSValue,NSNull,NSDate

NSNumber 是NSValu的子类 把int float double 数字类型的包装成OC对象后,能让如Array这类不能放基本数据类型的类中。

dwt1220 866

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Foundation NSNumber NSValue NSNull NSDate

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- // // main.m // NSNumber // // Created by LiuWei on 15/4/19. // Copyright (c) 2015年 LiuWei. All rights reserved. // #import // NSNum

伟的专栏 483

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Foundation框架—NSNumber、NSValue、NSDate

一、NSNumber 这个类主要是用来封装基本类型的 1. OC中的集合是不允许存入基本类型的,这就需要我们将基本类型进行封装下,然后存进去。这个方法类似于Java中的自动装箱和卸箱,Java中的集合其实也是不允许存入基本类型的,但是我们仍然可以那么操作,就是因为有自动装箱功能。     NSNumber 是 NSValue 的子类,但是NSNumber 只能包装数字类型(基本数据类型)不

北往风吹 625

Foundation框架下的常用类(NSNumber, NSValue, NSDate,NSDateFormatter)

1.NSNumber 将基础数类型数据转成对象数据(比如int float double BOOL long等等) //通过NSNumber将基础数类型数据转成对象数据。 NSNumber * intNumber = [[NSNumber alloc] initWithInt:50]; NSNumber * floatNumber = [NSNumber num...

weixin_30627381的博客 158

黑马程序员——Foundation学习总结12-16

《C语言22-预处理指令1宏定义》学习总结 《C语言22-预处理指令1宏定义》学习总结 《C语言22-预处理指令1宏定义》学习总结 《C语言22-预处理指令1宏定义》学习总结 《C语言22-预处理指令1宏定义》学习总结

zhangjiawei2014的专栏 560

OC——Foundation—常用的类(4)——NSNumber、NSValue、NSNull、NSDate

NSNumber NSNumber可以将基本数据类型包装成对象,这样就可以间接将基本数据类型存进NSArray,NSDictionary等集合中 常见的初始化方法: //将一个int类型的数包装成一个number对象 NSNumber *number=[NSNumber numberWithInt:10]; //创建一个数组 NSMutableArray *array=[NSM...

weixin_34194359的博客 124

Objective C Foundation基础框架

iOS Foundation基础框架就是以Foundation.h头文件的库 #import Mac OS X和iOS都使用了Foundation基础框架。该框架中有很多日后开发常用的API,非常基础重要。以下就常用的类和结构做个介绍。 NSObjct NSObject类,是ObjC类族中的根类。NSObject有一些高级特性支持,在灵活和高效开发中十分常用。 perform…方法和

KindAzrael的专栏 4742

3、Foundation

3、Foundation 常用的结构体:NSRange:NSPoint:–(x,y)NSString创建字符串方法:从文件读字符串字符串写文件其它方法(略,待补充)NSMutableStringNSArray给数组里的元素都发送相同消息:数组的遍历数组的排序:派生出...

amwhfqw5361的博客 167

NSValue(可以包装任意值)

// // main.m // OC05-task-05 // // Created by Xin the Great on 15-1-26. // Copyright (c) 2015年 Xin the Great. All rights reserved. // #import int main(int argc, const char * argv[]) { @auto

上山数松鼠 1782

OC类与对象(下)

和定义类不同,我们不用@interface这类关键字而是用@protocol关键字,基本语法如下@protocol 协议名 <父协议1, 父协议2> {//方法的定义。上面语法的详细说明如下协议名和类名采用相同的命名规则(遵守我们的一个可读性的规范)一个协议可以有多个直接父协议,但协议只能继承协议,不能继承类协议中定义的方法只有方法签名,但没有方法实现,协议中可以是类方法也可以是实例方法。协议中的所有方法都具有公开的访问权限下面定义两个协议。

qq_73106050的博客 1277

NSNUmber,NSValue,NSNull

NSNUmber数字对象【基本数据类型】 把C语言的int char long float double NSInteger等基本的数据类型转化(包装)为一个数字对象 数字包装类NSNUmberNSValue可以把任意的数据类型转化为NSValue对象 那么C语言的数据类型和结构体类型等这些复合的数据类型,都可以通过NSValue进行转换 int *、 int[5]、 struct Ran

遇见更好的自己 354

IOS之NSValue整理

为什么80%的码农都做不了架构师?>>> ...

weixin_34117211的博客 235

NSValue的使用

NSNumber是NSValue的子类,但 NSNumber只能包装数字类型,NSValue可以包装任意值。也可以用NSValue包装结构体后加入NSArray,NSDictionary等集合中。 创建NSValue的常用方法 - (id)initWithBytes:(const void *)value objCType:(const char *)type + (NSValue *...

weixin_33705053的博客 374
上一篇: Objective-C之Foundation框架的NSMutableDictionary
下一篇: Objective-C之Foundation框架的NSObject和反射机制的应用
技术宝哥
博客等级 码龄16年 331粉丝 222原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值