Objective-C学习中对 C语言的扩展

138c06953da5e7fe9fbe54ce6c233324.png

点击上方蓝字关注我,了解更多咨询

2fea7a986141fe7bf67a3981cf823ee6.png

Objective-C学习中对 C 的扩展是本文要介绍的内容,Objective-C和Cocoa是苹果公司Mac OS X操作系统的核心。Objective-C语言是C语言的一个扩展集,许多具备Mac OS X外观的应用程序都是使用该语言开发的。Cocoa是使用Objective-C编写的工具包,它不仅包含Mac OS X用户界面的所有元素,还包含其他许多内容。

7856db560cd3fd9e40734b4cfbf6fe78.png

Objective-C文件的扩展名是.m,在Xcode中,.m文件、.c文件(标准C程序)、.cpp(C++程序)文件的编译工作都由GCC(GNU Compiler Collection)处理。

#import

和C语言一样,Objective-C使用头文件来包含元素声明,这些元素包括结构体、符号常量、函数原型等。C语言使用#include语句通知编译器应在头文件中查询定义,而在Objective-C程序中通常会使用#import来实现这个目的。

#import可保证头文件只被包含一次,而不论此命令实际上在那个文件中出现了多少次。在C语言中,程序员通常使用基于#ifdef命令的方案来避免一个文件包含另一个文件,而后者又包含***个文件的情况。而在Objective-C中,程序员使用#import实现这个功能。

#import <Foundation/Foundation.h>

此语句告诉编译器查看Foundation框架中的Foudation.h头文件。Foudation框架处理的是用户界面之下的层(Layer)中的特性,例如数据结构和通信机制,Objective-C中的大多数程序都以Foundation框架为基础。

NSLog()和@"字符串"

Cocoa对其所有函数、常量和类型名称都添加了"NS"前缀,这个前缀告诉程序员和编译器函数来自Cocoa而不是其他工具包。两个不同工具包使用相同标识符时会导致名称冲突,而前缀可以预防这个大问题。由于没有集中管理的前缀注册表,所以程序员可以任意选用前缀,许多人使用他们的姓名首字母或公司名称作为前缀。鉴于Cocoa已占用了"NS"前缀,程序员在为自建的变量或函数名称添加前缀时就不应该再用"NS"了,以免发生混乱。

NSLog()这个Cocoa函数和C语言中的printf()很相似,它接受一个字符串作为其***个参数,该字符串可包含格式说明符(如%d),还可以接受匹配格式说明符的其他参数。NSLog()函数和printf()函数的区别在于,前者添加了一些特性,例如时间戳、日期戳和自动附加换行符('\n')等。beauty注:这个特性太有用了,我所有的VC程序中都有自己写的一个函数WriteLog(),完成的是和NSLog()几乎一样的功能。

我们来看下这条NSLog()语句:

NSLog(@"Hello, Objective-C!");

@符号是Objective-C在标准C语言基础上添加的特性之一。双引号中的字符串前有一个@符号,这表示引用的字符串应该作为Cocoa的NSString元素来处理。

大多数Cocoa元素都以非常直接的方式命名,名称尽量描述出他们可实现的特性。例如,NSArray提供数组,NSDateFormatter帮助程序员用不同方式来格式化日期,NSThread提供多线程变成工具,NSSpeechSynthesizer使用户听到语音。相应的,NSString就是Cocoa中的一串字符。

NSString类型有许多打包的特性,Cocoa在需要字符串时可随时使用它们。下面是一些NSString功能。

(1)告知其长度;

(2)将自身与其他字符串比较;

(3)将自身转换为整型值或浮点值。

还有许多功能是使用C风格字符串无法实现的,以后在使用中会做进一步的说明。

printf()函数中没有和NSString类型相应的格式说明符,因此我们不能将其作为参数传递给printf()函数。而NSLog()函数针对NSString类型添加了%@格式说明符,从而使得NSLog()函数可以接受相应的参数,将其作为NSString使用该字符串中的字符。

如果将C风格的字符串(而不是专门的NSString的@"字符串"元素)传递给NSLog(),编译器会给出警告:

main.m:46: waring: passing arg 1 of `NSLog` from incompatible pointer type

如果要运行这个程序,他可能会崩溃。要捕捉这样的问题,可以让Xcode总是将警报作为错误来处理。

布尔类型  

C语言拥有布尔数据类型bool,它具有true值和false值。Objective-C提供了相似的类型BOOL,它具有YES值和NO值。这两种不同的布尔类型可以在同一个程序中共存,但在编写Cocoa代码时要使用BOOL。

Objective-C中的BOOL实际上是一种对带符号的字符类型(signed char)的定义(typedef),它使用8位存储空间。YES定义为1,而NO定义为0(使用#define)。Objective-C并不将BOOL作为仅能保存YES值或NO值得真正的布尔类型来处理。编译器将BOOL认作8位二进制数,YES值和NO值只是一种约定。这引发了一个小问题:如果不小心将一个长于1字节的整型值(例如short或int值)赋给一个BOOL变量,那么只有低位字节会用作BOOL值。假设该低位字节刚好为0,BOOL值将会是0,即NO值。

dd1efa9cef146d808648309919aada2b.png

END

*声明:本文于网络整理,版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜。

32217fe62803b35b619b5e5baedb5b4f.png

68946296bcd8e50b4f0c403759b02698.gif

戳“阅读原文”我们一起进步

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/338046.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

神武4手游服务器维护,神武4手游 本周新手服限服开启 !

《神武4》手游新老玩家互动福利新手服即将于本周在天下无双、二〇二〇、见龙在田限服开启&#xff0c;通过“老带新”模式&#xff0c;助力萌新玩家快乐成长的同时&#xff0c;也为老玩家送出更多福利好礼。【《神武4》手游新手服限服开启 】服务器等级≥65且自身等级≥69级的玩…

双向数据绑定是什么

一、什么是双向绑定 我们先从单向绑定切入单向绑定非常简单&#xff0c;就是把Model绑定到View&#xff0c;当我们用JavaScript代码更新Model时&#xff0c;View就会自动更新双向绑定就很容易联想到了&#xff0c;在单向绑定的基础上&#xff0c;用户更新了View&#xff0c;Mo…

织梦网站上传服务器不显示图片,解决织梦后台登陆不显示验证码图片问题

最近在工作中遇到一个问题&#xff0c;用织梦搭建好的网站&#xff0c;在本地上测试没问题但是上传到正式服务器上就出问题了&#xff0c;在后台登陆的时候&#xff0c;验证码的图片老是显示不出来&#xff0c;后来查阅了相关资料才终于找到问题的根本原因&#xff0c;下面就分…

Python与C语言的区别是什么?

点击上方蓝字关注我&#xff0c;了解更多咨询Python与C语言的区别是什么?Python是由C语言实现&#xff0c;C语言是编译型语言&#xff0c;经过编译后生成机器码再运行&#xff0c;执行速度快不能跨平台&#xff0c;一般用于操作系统驱动等底层开发。Python是理解为解释型语言执…

C语言数据类型从计算机原理的角度是怎样看待的?

点击上方蓝字关注我&#xff0c;了解更多咨询初学C语言&#xff0c;首先要接触的就是数据类型了&#xff0c;这也是学习任何一门语言所必须经历的阶段。很多同学在学习的时候不理解数据类型&#xff0c;因为对计算机及原理知之甚少。所以&#xff0c;在学习数据类型之前&#x…

android module中获取 app_Android组件化架构 - 4. 动态创建

Android 组件化中使用动态创建的作用是解耦&#xff1b;1. 反射机制反射有两个作用&#xff1a;1.反编译&#xff1a;.class->.java;2.通过反射机制访问java对象中的属性&#xff0c;方法&#xff0c;构造器等&#xff1b;实现反射&#xff0c;实际上是得到Class对象2. 动态…

小白适用的C语言数据类型转换及转换规则

点击上方蓝字关注我&#xff0c;了解更多咨询1.不同类型数据间的混合运算与类型转换&#xff1a;①若参与运算量的类型不同&#xff0c;则先转换成同一类型&#xff0c;然后进行运算②转换按数据长度增加的方向进行&#xff0c;以保证精度不降低。如int型和long型运算时&#x…

jax-ws和jax-rs_带有JAX-RS和PrimeFaces的RESTful图表

jax-ws和jax-rs通常&#xff0c;利用图表提供数据的直观表示很有用。 PrimeFaces提供制图解决方案&#xff0c;可轻松将数据的可视表示形式添加到Web和移动应用程序中。 如果我们将PrimeFaces图表组件的使用与RESTful Web服务数据结合在一起&#xff0c;我们可以创建自定义图表…

udp 使用connect优点_nodejs源码分析第十九章 -- udp模块

udp不是面向连接的协议&#xff0c;所以使用上会比tcp简单&#xff0c;他和tcp一样&#xff0c;使用四元组来标记通信的双方&#xff08;单播的情况下&#xff09;。我们看看udp作为服务器和客户端的时候的流程。1 在c语言中使用udp1.1 服务器流程&#xff08;伪代码&#xff0…

C语言与Java的对比,你想好选谁了吗?

点击上方蓝字关注我&#xff0c;了解更多咨询很多同学纠结自己应该学C语言还是学Java&#xff0c;本篇文章带你细致了解C语言与Java的各方面的不同之处&#xff0c;让你能够更全面的把握编程语言&#xff01;1.Java与C语言各自的优势C语言是面向过程的语言&#xff0c;执行效率…

C语言:初始C语言

点击上方蓝字关注我&#xff0c;了解更多咨询什么是C语言为什么学习C语言&#xff1f;第一个C语言程序什么是C语言说到语言&#xff0c;可能会想到汉语&#xff0c;英语这些人与人之间交流的语言&#xff0c;语言是人与人之间沟通的桥梁&#xff0c;通过语言&#xff0c;我们得…

apache camel_带有调试器的Apache Camel Eclipse工具

apache camel大约2个月前&#xff0c; Lars Heineman在 JBoss工具堆栈中写了关于改进的Apache Camel Eclipse工具的博客。 在即将发布的版本中&#xff0c;他们将Camel调试器与本机Eclipse调试器集成在一起&#xff0c;因此当您使用断点时&#xff0c;您将获得Eclipse调试体验…

服务器皮肤在哪个文件里,服务器怎么使用皮肤

服务器怎么使用皮肤 内容精选换一换在使用云服务器备份制作的整机镜像创建弹性云服务器时&#xff0c;创建速度很慢&#xff0c;或者界面提示用户&#xff1a;该镜像不支持快速创建云服务器功能。CSBS服务早期提供的老备份格式无法支持快速创建云服务器&#xff0c;因此&#x…

c语言中?:的用法

点击上方蓝字关注我&#xff0c;了解更多咨询?:是C语言中的三目运算符&#xff0c;可以用来替代 if—else 语句。?:的使用方法为&#xff1a;<表达式1>?<表达式2>:<表达式3>它是对第一个表达式作真/假检测&#xff0c;然后根据结果返回另外两个表达式中的…

字符斜杠是合法常量吗_【面试秘籍】你对String的intern方法了解吗

我们先来看个例子&#xff1a;public class StringTest { public static void main(String[] args) { String a "A"; String b new String("A"); System.out.println(a b); // false String c b.intern(); Syst…

http协议下需要服务器推送吗,HTTP/2.0 服务器推送实现

前言HTTP/2.0发布于2015年&#xff0c;作为新一代HTTP协议&#xff0c;其由于推进互联网加密技术的使用&#xff0c;所以只能作用于https连接当中。HTTP/2.0提供HTTP语义的有效序列化&#xff0c;是一个二进制协议&#xff0c;所有的框架开始一个8字节的头&#xff0c;紧跟着的…

C语言最常用的编译器

点击上方蓝字关注我&#xff0c;了解更多咨询对于大部分工科类专业的学生来说&#xff0c;如果说是需要学习c语言的话&#xff0c;那选择编译器就是我们第一个遇到的问题了&#xff0c;这一类软件有很多&#xff0c;每一个软件都有他各自的优点&#xff0c;当然了也有他各自的缺…

word一键生成ppt 分页_如何一键把Word转换为PPT?

看到评论区有人问可以一键转换吗&#xff1f;当然可以&#xff0c;比如简单好用的【迅捷PDF转换器】迅捷PDF转换器 - 多功能的PDF转换成Word|JPG|PPT转换器安装打开软件之后&#xff0c;在PDF转换栏目下&#xff0c;点击PDF转换其它&#xff0c;就可以看到文件格式转PPT&#x…

jboss4 迁移_JBoss BPM Travel Agency的微服务迁移故事

jboss4 迁移不久前&#xff0c;我们启动了一个规模较大的JBoss Travel Agency演示项目&#xff0c;以展示JBoss BPM Suite的一些更有趣的功能。 我们提供了一系列视频 &#xff0c;不仅向您展示了如何安装它&#xff0c;项目中各种规则和流程工件的含义&#xff0c;还向您介绍…

windows系统c 实现ftp服务器,windows系统c 实现ftp服务器

windows系统c 实现ftp服务器 内容精选换一换弹性云服务器卸载磁盘。弹性云服务器状态为stopped时支持系统盘(也就是/dev/sda挂载点)和用户盘的卸载&#xff0c;没有操作系统限制&#xff0c;也不需要在弹性云服务器内部安装vmtools。弹性云服务器状态为active态时有如下约束限制…