虽然Objective-C知识在C语言的基础上添加了一些新特性,但它非常好用!本章书本中主要是教我们如何利用Xcode创建一个Objective-C版的Hello,World!书中用的是很老版本的Xcode了,这章笔记我会记录自己用Xcode12来创建一个Hello,World工程。
依次打开Xcode后,选择Create a new Xcode project -> 选择macOS -> CommandLine Tool(命令行版控制台程序)。
工程名写HelloWorld,然后下面的ID你可以写com.你昵称,比如我是com.VxerLee,然后点Next创建
接着点运行,你的第一个Objective-C版的HelloWorld就运行成功了!
首先Objective-C程序的源文件名都是以.m
为后缀,然后我们看源码中可以发现和C语言一样,它也是以main函数为入口而且返回值类型、参数都一样,因为毕竟OC是C的扩展。接着再仔细看代码中剩下几行与C语言还是有细微的差别,比如说这个#import
,当然你如果学过Java、Go、Rust、Python语法的话对这个import就很熟悉,类似导入包名的意思。
和C语言一样,OC也是使用头文件来包含结构体、符号常量、函数原型等元素的声明。
在C语言中我们用#include
语句来通知编译器查询头文件中相应的定义代码。
在OC中我们也可以用#include来达到通用的目的,不过
最好不要这样做,因为你#include时候会导致一个头文件被多次包含,你就必须修改头文件添加一些宏定义这样就很麻烦!。所以Xocde编译器提供了#import
语法,他使你头文件无论如何都只被包含一次,而且还能使导入头文件时候加载速度变快,这是include所做不到的地方。
#import <Foundation/Foundation.h> //告诉编译器查找Foundation框架中的Foundation.h头文件
那么什么是框架?
书中说框架是一种把头文件、库、图片、声音等内容聚集在一个独立单元中的集合体。
,应该就是把库和三方东西打包起来了。
Cocoa组成部分有(Foundation)、(Application Kit)也叫AppKit框架,其中Foundation框架处理的是用户界面之下的那些层的特性,比如数据结构和通信机制,AppKit则类似Windows中的MFC(图形界面)框架。
我们的HelloWorld工程中有这么一句代码,其中这个NSLog
函数就是在Foundation
框架中声明的,其功能类似printf在控制台输出参数的内容。
NSLog(@"Hello,World!")
其中Foundation框架中的大量函数都是以NS开头的,这是为了避免名称冲突,而且Cocoa的前身是NextSTEP,所以就用了NS前缀。
其中我们的NSLog参数中字符串前面加了@
符号。
在C#语法中也有类似@符号,它代表@包含的字符串所有符号不需要被转义,比如C:\
不用转义成C:\\
。
而在OC中@符号代表这字符串作为Cocoa的NSString元素来处理,什么意思呢?
通俗点讲就是@包含的字符串变成了NSString的对象了,你可以在字符串后加.来调用函数或者是访问属性。
通过学习书上的这一小节,我学会了如何使用Xcode创建工程,并且了解了OC中用#import导入头文件的原理,学会了调用函数输出到控制台中,并且了解了OC中带@符号的字符串意义。
OC中布尔类型的关键字是BOOL
,它具有YES
和NO
两个值。顺便提一下OC中的BOOL类型比C语言中的bool类型早诞生了十多年
创建一个名为BOOL Party的工程
#import <Foundation/Foundation.h> /* *函数:areIntsDifferent *说明:如果两个参数一样返回YES否则返回NO */ BOOL areIntsDifferent(int arg1,int arg2) { if(arg1 == arg2) { return (NO); }else{ return (YES); } } /* *函数 boolString *说明 输入BOOL值,返回对应的YES 和 NO字符串 */ NSString *boolString(BOOL yesNo) { if(yesNo == NO) { return (@"NO"); }else { return (@"YES"); } } int main(int argc,const char* argv[]) { BOOL areTheyDifferent; areTheyDifferent = areIntsDifferent(5,5); NSLog(@"%d和%d相同吗? %@",5,5,boolString(areTheyDifferent)); areTheyDifferent = areIntsDifferent(23,42); NSLog(@"%d和%d相同吗?%@",23,42,boolString(areTheyDifferent)); return (0); }
控制台输入如下:
在书中的第2章中学会了创建HelloWorld工程,学会了#import、@""、BOOL、NSLog关键字的知识。