Objective-C 基础学习问题之BOOL

今天开始了学习Objective-C 自己总结下以后需要注意的问题~~菜鸟级请大神指教

问题注意一、布尔类型(BOOL)

首先附上学习使用的代码:main.h

------------------------------------------------------------------------------------------------------------------------------------------

//

//  main.m

//  Helio objective-c

//

//  Created by 女程序猿 on 15/5/17.

//  Copyright (c) 2015年 女程序猿. All rights reserved.

//

#import <Foundation/Foundation.h>

//returns no is teo integers have the same

//value,yes otherwise

BOOL areIntsDifferent(int thing1,int thing2)

{

if(thing1==thing2){

return (NO);

}

else{

return (YES);

}

}//areIntsDifferent

//given a No value,return the human-readable

//string "NO".Itherwise return "YES"

NSString *boolString(BOOL yesNo)

{

if (yesNo == NO) {//BOOL值

return (@"NO");

}else{

return (@"YES");

}

}//boolString

int main(int argc, const char *argv[])

{

BOOL areTheyDifferent;

areTheyDifferent = areIntsDifferent(5, 5);

NSLog(@"ARE %d and %d different? %@",5,5,boolString(areTheyDifferent));

areTheyDifferent = areIntsDifferent(23, 42);

NSLog(@"ARE %d and %d different? %@",23,42,boolString(areTheyDifferent));

return 0;

}

------------------------------------------------------------------------------------------------------------------------------------------

获取BOOL值时要注意方法

想来大部分初步接触Objective-C并且有一定C语言基础的人在进行areIntsDifferent()的编写时可能会把函数写成一行语句

BOOL areIntsDifferent_faulty(int thing1,int thing2)

{

return(thing1 - thing2)

}//areIntsDifferent_faulty

这样做的原因时假定非零值等于YES。但事实并不是如此。的确在c语言中会返回的是true或者false,但是在中Objective-C返回的BOOL值只有YES或NO

if(areIntsDifferent_faulty(23,5)==YES) {

//...

}

在c语言中返回的值返回的值可能等同于真值,但是在Objective-C中由于YES的值以整数型为1,而23-5=18并不等于1所以函数将显示错误

!!!因此BOOL值尽量不要与YES进行比较

将之前的if语句改成

if(areIntsDifferent_faulty(23,5)) {

//...

}

就正确了。

直接与NO比较一定是安全的,因为c语言中的假值就一个0.

注:参考书籍:Objective-C基础教程 人民邮电出版社

时间: 2025-01-08 18:42:35

Objective-C 基础学习问题之BOOL的相关文章

Objc基础学习记录3

在学习Objective-c中, 数组 1.NSArray, 这是一个不可变的数组,不能修改和删除其中的对象,可以存储任意objective的对象指针. 不能存储int,char类型的,,需要转换为需要的类型. 要快速枚举数组中的值,用in. 1 for (NSString *eleement in myArray) 2 NSLog(@"myArray is %@",element); 2.NSMutableArray 这是一个可变的数组,可以向其中添加和删除对象. a.添加addOb

C++基础学习教程(二)

接上一节内容 2.5条件和逻辑 自增和自减操作符 这个主要区别就是在前和后,大多数学习过其他语言的应该都知道.所以,一个程序带过. 示例如下: /************************************************************************* > File Name: list1001_++.cpp > Author: suool_hu > Mail: [email protected] > Created Time: 2014年0

QT基础学习笔记

Qt简介:1991, 挪威奇趣科技Trolltech开发的跨平台c++图形用户界面(GUI)应用程序开发.2008,被诺基亚收购2012,转让给芬兰的Digia公司. 商业版:专业版,企业版: // 开源版(GNU) 优势:1.跨平台 2.面向对象 3.丰富API 类库  4.可视化编程 5,时间驱动机制 JAVA--compile once, run anywhere    一次编译,到处运行Qt-- wrire once ,comile anywhere     一次编写,到处编译 桌面操作

linux系统构建基础学习笔记——操作

linux系统构建 ********************************************************                  ---交叉编译环境构建--- 安装arm-linux-gcc-4.3.2 (交叉编译器) tar xzvf arm-linux-gcc-4.3.2.tgz -C /cd /usr/local/arm/4.3.2/bin./arm-linux-gcc -v在/etc/bashrc文件的最后添加如下一行:   export PATH=

C++基础学习教程(八)

转载请注明出处:http://blog.csdn.net/suool/article/details/38300117 引入 在进行下一步的学习之前,我们需要厘清几个概念. RAII 首先介绍一个编程习语,"RAII"(ResourceAcquisition Is Initialization,资源获取即为初始化),他描述了利用构造函数\析构函数,并在函数返回时自动析构的机制.简言之,RAII意为构造函数获取一种资源;打开一个文件,一个网络连接,或仅仅是从某I/O流中复制一些标志.这种

C++基础学习教程(四)

2.9字符专题 2.9.1类型同义词 也就是typedef声明,这个东西就是相当于起绰号,为了方便记忆和简化而生.相信在学习其他语言的时候一定有所了解,在此不再赘述. 再次示例一个之前写过的用typedef改写的程序: /************************************************************************* > File Name: char_count.cpp > Author: suool > Mail: [email pr

java基础学习总结——流

永不放弃,一切皆有可能!!! 只为成功找方法,不为失败找借口! java基础学习总结——流 一.JAVA流式输入/输出原理 流是用来读写数据的,java有一个类叫File,它封装的是文件的文件名,只是内存里面的一个对象,真正的文件是在硬盘上的一块空间,在这个文件里面存放着各种各样的数据,我们想读文件里面的数据怎么办呢?是通过一个流的方式来读,咱们要想从程序读数据,对于计算机来说,无论读什么类型的数据都是以010101101010这样的形式读取的.怎么把文件里面的数据读出来呢?你可以把文件想象成一

零基础学习swift

swift基础学习篇(一) swift语言是2014年苹果公司于WWDC(苹果开发者大会)发布的新技术:用于编写iOS和OS X应用,支持代码预览:Chris Lattner从2010年7月开始主导开发swift编程语言: 环境准备 语言特点 语法基础 项目实战 环境准备 运用xcode 只需将语言设置为swift: 语言特点 swift的特性 * 1.运行时特性 * - 速度是python的3.9倍; (OC 速度是python的2.6倍) - 拥有自己的自动垃圾回收机制. - 与OC共用运行

Object-C基础学习笔记(1)

1.苹果公司将Cocoa.Carbon.QuickTime和OpenGL等技术作为框架集:提供Cocoa组成部分有: (1)Foundation框架(有很多有用的,面向数据的低级类和数据结构): (2)Application Kit(也称AppKit)框架(包含了所有的用户接口对象和高级类,例如NS……), 还有一个支持框架的套件,包括Core Animation和Core Image. NS前缀在IOS开发中,经常会遇到NS开头的对象,这个要从乔帮主历史恩怨说起.当年Steve Jobs 和J