Object-C之(Null)与(Bool)

Objective-C学习:布尔类型编程 布尔类型是编程语言中常用的一种数据类型,用于表示真值,即真或假。我们可以使用条件语句、比较运算符和逻辑运算符来操作布尔类型的变量,进行相应的逻辑判断和操作。本文将详细介绍Objective-C中的布尔类型,并提供相应的源代码示例。需要注意的是,在Objective-C中,布尔类型的取值不仅限于。等)一起使用,进行复杂的逻辑判断。在上面的代码中,我们声明了两个布尔类型的变量。在上面的代码中,我们声明了两个整数类型的变量。在上面的代码中,我们声明了两个布尔类型的变量。,并将它们的比较结果赋给了布尔类型的变量。 阅读详情
在写iOS程序的时候,想初始化一个空值的时候,经常会迷茫到底是用nil,null还是NSNull, 想定义一个布尔值的变量时,又需要去想想应该用bool,BOOL抑或Boolean,赋值的时候应应该给YES/NO还是true/false。今天正好来理一下。 

nil/Nil/NULL/NSNull  

Matt Thompson总结了这4个变量的不同之处: 
SymbolValueMeaning
NULL(void *)0literal null value for C pointers
nil(id)0literal null value for Objective-C objects
Nil(Class)0literal null value for Objective-C classes
NSNull[NSNull null]singleton object used to represent null


NULL是C语言中用来指代一个空指针的,Object-C是C语言的超集,可以使用C语言中特性,因此当你处于C语言语义下的时候应该使用NULL。比方说初始化一个结构体等 
Obj-c代码   收藏代码
  1. struct MyStruct *dStruct = NULL;  


nil指代的是一个指向空的对象指针,因此当你初始化一个对象为空的时候,应该使用nil,另外,在java中,如果你去调用空对象的方法时,会抛出NullPointerException,在obj-c中,会返回0。因此,在obj-c中,通常情况下是不需要去做空对象判断的。即: 

Obj-c代码   收藏代码
  1. if (obj !=nil && [obj isPass]) {  
  2.     //do something  
  3. }  
完全可以简化为 

    if ([obj isPass]) { 
        //do something 
    } 
    
Nil指代的是一个指向空的类指针,用的情况很少,当期望返回值为一个类的时候,空值应该使用Nil。 

NSNull提供了一个类方法来生成一个单例的空对象, 这个类是由Foundation框架引入的,主要是为了绕过Obj-c中的集合类,NSArray,NSDictionary等不能放nil值的约束的。可以把其看做是一个可以用于集合类的nil的封装。 
Obj-c代码   收藏代码
  1. NSMutableDictionary *mutableDictionary = [NSMutableDictionary dictionary];  
  2. mutableDictionary[@"Key-1"] = [NSNull null];   
  3. NSLog(@"Keys: %@", [mutableDictionary allKeys]);  


BOOL/bool/Boolean/NSCFBoolean  
Matt Thompson对这几个变量的不同之处的归纳如下: 
NameTypedefHeaderTrue ValueFalse Value
BOOLsigned charobjc.hYESNO
bool _Bool(int)stdbool.htruefalse
Booleanunsigned charMacTypes.hTRUEFALSE
CFBooleanRefstructCoreFoundation.hkCFBooleanTruekCFBooleanFalse


简单来说,在Obj-C中,都应该使用BOOL,然后使用YES和NO。这会帮你避免很多头疼的问题,当你遇到问题的时候,比方说这个问题: http://blog.bignerdranch.com/564-bools-sharp-corners/ 。 
你可以通过上表中的差别,来定位问题。
【12】C++实战篇——总结:C++ 中 BOOL与bool TRUE与true FALSE与false 的区别 C++中BOOL与bool、TRUE/TRUE与false/true的区别主要体现在:1)类型不同,BOOL为int型而bool是布尔型;2)长度不同,bool固定1字节,BOOL通常4字节;3)取值不同,bool只能为true/false(1/0),BOOL的TRUE/FALSE是0和非0的区别;4)false/true是C++关键字,FALSE/TRUE是宏定义。此外,NULL在C++中定义为0,与0无实质区别。这些差异主要源于C++与C的兼容性考虑,编译器会进行隐式类型转换。 阅读详情

相关推荐

从萤石云到GB28181:海康4G摄像机接入第三方平台的曲折之路

本文深入探讨了海康4G摄像机接入第三方平台时遇到的协议冲突问题,特别是GB28181与萤石云服务的互斥性。通过技术分析揭示了4G模块的定向流量限制和协议栈资源竞争等核心问题,并提供了有线接入测试和萤石云API二次开发等解决方案。最后总结了设备选型的关键参数和协议兼容性检查清单,为安防监控系统集成提供实用指导。

mango的博客 991

Object-C中nil、Nil、NULL与NSNull的一些理解

定义区别 nil指向OC中对象的空指针; Nil指向OC中类的空指针; NULL指向变量类型的空指针; NSNull在集合对象中,表示空值的对象; 使用小结 从字面意义上理解,nil是一个对象,而NULL是一个值,所以在调用对象方法时:[nil 任意方法] 返回...

chuyu0053的博客 252

BMW Trojan 样本分析

仅用于链接已经删却但是需要方便查阅的原文http://blog.youkuaiyun.com/zirconsdu/article/details/7997470 转载请注明出处http://blog.youkuaiyun.com/zirconsdu/article/details/8153813。 一些具体数据结构和具体路径隐去。   BMW木马样本分析 摘要 2011年底和某Hunter的谈话涉及到当时新检

zirconsdu的专栏 3910

Objective-C中的布尔类型的用法

taylor总结:在objective-c中,永远不要用BOOL值与YES比较,因为非零值未必是BOOL 的YES,但是0 一定是NO。 Objective-C中的布尔类型: 早期的C 语言中是没有布尔类型的(C99 增加了布尔类型),Objective-C 中增加BOOL 类型 来表示YES、NO,注意不是TRUE、FALSE。BOOL 使用了一个8 位(一个字节)的整数进行 表示,

taylor的专栏 7203

别再死磕Excel了!用Vensim PLE免费版,30分钟搞定你的第一个系统动力学模型

本文介绍如何使用Vensim PLE免费版在30分钟内构建第一个系统动力学模型,无需编程或数学基础。通过个人储蓄增长案例,详细讲解因果回路图绘制、存量流量图创建及方程编写,帮助读者掌握动态系统建模与仿真技巧,适用于理财、项目管理等多种场景。

weixin_29045001的博客 328

植物GO注释

本文主要是对没有GO term库的植物进行注释。 1、选用AgriGo 进行注释,在agriGO中点击species后,查看与你目标物种相近的物种作为库 2、比如我以甜菜为例 为了找到和GO term对应的ID,先找到PLAZA,进入网站https://bioinformatics.psb.ugent.be/plaza/versions/plaza_v3_di...

weixin_30300225的博客 2223

BOOL、bool的区别 && NULL、0、nullptr的区别

一、BOOL、bool 1、类型不同 BOOL为int型,bool为

记录开发学习过程 2074

vuecil3+版本下,兼容ie等不支持es6的低版本浏览器

*综上,完成兼容性涉及到的配置的文件有,对应在页面中查看代码,就不单独附代码了:main.js。

yhr0322的博客 832

AMF数据类型详解

AMF数据类型详解 一、AMF格式定义 类型说明(ObjType) 具体值 ObjValueSize CORE_NUMBER 0x00 8字节 CORE_BOOLEAN 0x01 1字节 ...

qq_28309121的博客 1895

2023华为od机试C卷【宽度最小的子矩阵】Python 实现

给定一个矩阵,包含N*M个整数,和一个包含K个整数的数组现在要求在这个矩阵中找一个宽度最小的子矩阵,要求子矩阵包含数组中所有的整数。

MISAYAONE的博客 2185

AutoSAR MemMap模块详解及使用注意事项

在本文中,我们将深入探讨MemMap模块的实例解析,并介绍在使用该模块时需要注意的一些事项。在上述代码中,我们使用了MEMMAP_START_SEC_VAR_32BIT和MEMMAP_START_SEC_CODE来定义MemMap区域的起始位置,使用MEMMAP_STOP_SEC_VAR_32BIT和MEMMAP_STOP_SEC_CODE来定义MemMap区域的结束位置。1.合理划分MemMap区域:根据实际需求,合理划分MemMap区域,将不同类型的变量放置在不同的区域中,以便于管理和访问。

weixin_50547796的博客 2530

php is type,PHP数组is_*()对比和解析

这篇篇文章 讲的是PHP一系列is函数 is_array — 检测变量是否是数组is_bool — 检测变量是否是布尔型is_callable — 检测参数是否为合法的可调用结构is_dir — 判断给定文件名是否是一个目录is_double —is_float()的别名is_float — 检测变量是否是浮点型is_file — 判断给定文件名是否为一个正常的文件is_int — 检测变量是...

weixin_35261775的博客 207

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

PhalApi-v1.3.2,一周年纪念版,轻量级接口框架

#PhalApi-v1.3.2 (一周年纪念版)发布,PHP轻量级开源接口框架# [前言] 时隔一年PhalApi已经一岁了,从无到有在到活跃人数350+的社区,到28+落地项目,实用拓展17+,一切都离不开各位小伙伴的一同的努力以及对开源精神的热情,那么小编今天为大家带来PhalApi最新一期的更新v1.3.2的具体内容: [升级注意] 基于老版本开发...

weixin_34384915的博客 112

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

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

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Ant Design Skeleton 语义化结构样式定制:classNames 与 styles 的对象/函数用法全解

> 本文基于 ant-design 仓库中 `components/skeleton/demo/style-class.md` 及其配套示例,深入讲解如何通过 `classNames` 与 `styles` 两个语义化样式 API,精确定制 Skeleton 骨架屏每一层占位结构的样式。文中不仅给出可直接运行的完整示例,还会从 Skeleton.tsx、共享 API 文档与合并 Hook 源码三个

gitblog_01012的博客 468

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

总结:C++ 中 BOOL与bool TRUE与true FALSE与false 的区别

在C++ 中 FALSE与false、TRUE与true、BOOL与bool 区别 转自:http://blog.chinaunix.net/uid-28458801-id-3941112.html 天高任鸟飞,海阔凭鱼跃! FALSE/TRUE与false/true的区别 1.FALSE/TRUE与false/true的区别: false/true是标准C++语言里新增的关键字,而FALSE/TRUE是通过#define,这要用途 是解决程序在C与C++中环境的差异,以下是FALSE/TR..

mengsuifengc的博客 4067

c语言中bool库函数,C语言中的bool

C99之前没有定义bool型,在C99中在stdbool.h中定义了_Bool为bool,当然true 和 false也没有定义。但是C++中是有bool型的,并且true 和 false也是有定义的。所以如果是C99之前的标准,需要我们自己定义bool,如typedef enum {false = 0, true = 1} bool;/* Copyright (C) 1998, 1999, 20...

weixin_36094492的博客 4968

C语言中bool类型的使用

C语言中bool类型的使用,bool类型的创建。

zxf123567的博客 4万+

c语言bool数据类型大小,浅谈C语言编程中的布尔bool数据类型

我们知道在C++里有专门的bool类型,用来表示真或假。但是在C语言里没有这样的类型(至少我是一直这么认为的),表达式的值0为假,非0为真。所以条件判断语句( if(…)、while(…) )非常灵活,甚至一个指针类型都可以是条件表达式。为了使程序更清晰,我们常常会给出如下的宏定义:typedef int BOOL;#define TRUE 1#define FALSE 0这是最常见的写法,能被任...

weixin_35650041的博客 2140

BOOL与bool TRUE与true FALSE与false 区别

FALSE/TRUE与false/true的区别 1.FALSE/TRUE与false/true的区别: false/true是标准C++语言里新增的关键字,而FALSE/TRUE是通过#define,这要用途 是解决程序在C与C++中环境的差异,以下是FALSE/TRUE在windef.h的定义: #ifndef FALSE #define FALSE 0 #endif #ifnd...

小小的熊的博客 1811

BOOL 与 NULL

在写iOS程序的时候,想初始化一个空值的时候,经常会迷茫到底是用nil,null还是NSNull, 想定义一个布尔值的变量时,又需要去想想应该用bool,BOOL抑或Boolean,赋值的时候应应该给YES/NO还是true/false。今天正好来理一下。 nil/Nil/NULL/NSNull Matt Thompson总结了这4个变量的不同之处: Symbol Va

yangxinca的专栏 801

UnityEngine.Object类的隐式bool转换,何时为null问题。

由一道Unity题目引出的思考

m0_54976913的博客 1777
上一篇: Object-C id 表示什么
下一篇: Object C的Categories
mincheat
博客等级 码龄17年 46粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值