Object-C 基础教程第二章,对C的扩展
前言
虽然Objective-C知识在C语言的基础上添加了一些新特性,但它非常好用!本章书本中主要是教我们如何利用Xcode创建一个Objective-C版的Hello,World!书中用的是很老版本的Xcode了,这章笔记我会记录自己用Xcode12来创建一个Hello,World工程。
创建Objective-C 版Hello World
依次打开Xcode后,选择Create a new Xcode project -> 选择macOS -> CommandLine Tool(命令行版控制台程序)。
工程名写HelloWorld,然后下面的ID你可以写com.你昵称,比如我是com.VxerLee,然后点Next创建
接着点运行,你的第一个Objective-C版的HelloWorld就运行成功了!
解析 Objective-C HelloWorld程序
首先Objective-C程序的源文件名都是以.m
为后缀,然后我们看源码中可以发现和C语言一样,它也是以main函数为入口而且返回值类型、参数都一样,因为毕竟OC是C的扩展。接着再仔细看代码中剩下几行与C语言还是有细微的差别,比如说这个#import
,当然你如果学过Java、Go、Rust、Python语法的话对这个import就很熟悉,类似导入包名的意思。
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(图形界面)框架。
NSLog()和@"字符串"
我们的HelloWorld工程中有这么一句代码,其中这个NSLog
函数就是在Foundation
框架中声明的,其功能类似printf在控制台输出参数的内容。
NSLog(@"Hello,World!")
NS前缀
其中Foundation框架中的大量函数都是以NS开头的,这是为了避免名称冲突,而且Cocoa的前身是NextSTEP,所以就用了NS前缀。
NSString:@是本体
其中我们的NSLog参数中字符串前面加了@
符号。
在C#语法中也有类似@符号,它代表@包含的字符串所有符号不需要被转义,比如C:\
不用转义成C:\\
。
而在OC中@符号代表这字符串作为Cocoa的NSString元素来处理,什么意思呢?
通俗点讲就是@包含的字符串变成了NSString的对象了,你可以在字符串后加.来调用函数或者是访问属性。
Objective-C HelloWorld工程总结
通过学习书上的这一小节,我学会了如何使用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关键字的知识。