初识Objective-C

本文介绍了Objective-C的基本概念,包括Objective-C作为C语言扩展的角色,以及简单的Objective-C程序。讲解了#import语句的作用,指出其在Objective-C中的重要性,并解释了框架的概念,特别是Foundation框架。此外,还讨论了NSLog()函数和NSString对象,强调了它们在Objective-C中的独特功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、什么是Objective-C

Objective-C是C语言的一个扩展集,几乎所有的OS X或IOS平台上的应用程序都是用该语言开发的。由于是对C的扩展,因此本篇以及之后的所有Objective-C相关的文章都将重点介绍Objective-C在C上添加的新特性,那么C的基础此处将不再赘述。

二、简单的Objective-C程序

#import <Foundation/Foundation.h>
int main(int argc, const char* argv[])
{
	NSLog(@"hello, Objective-C!!!");
	return (0);
}//main

如果你了解C,那么你应该会很熟悉上面的两行代码。请记住Objective-C本质就是C,因此其用来声明main()和返回数值的语法与C是一样滴。细心的话会发现代码中其实和C代码还是有些细微的差别的。就比如这个陌生的#import是什么?下面将将会一一分析这些不同的地方。

#import语句

其实很容易理解,就和我们的C一样的,C中我们用#include来包含头文件,通知编译器查询头文件中相应的定义代码。那么在Objective-C中我们则使用#import来达到同样的目的(虽然在Objective-C中也可以使用#include,但是一般不建议这么做,因为#import是由Xcode使用的编译器提供的,而我们用Objective-C开发一般都是在Xcode中进行编写代码)。#import可保证头文件只被包含一次,无论此命令在该文件中出现了多少次。

补充:在C中,程序员通常会使用#ifdef命令来避免一个文件包含了另一个 文件而另一个文件又包含了前者的情况。而在Objective-C中,程序员使用#import即可解决上述问题。

那么代码中的#import <Foundation/Foundation.h>意思是,告诉编译器查找Foundation框架中的Foundation.h头文件。
那么紧接着就会带来一个新的问题,什么是框架?

框架

框架就是一种把头文件、库、图片、声音等内容聚合在一个独立的单元中的集合体。而Foundation框架处理的是用户界面之下的那些层的特性,比如数据结构和通信机制。本篇以及之后的所有Objective-C相关的文章都以Foundation框架为基础。
每一个框架都是一个重要的技术集合。并且每个框架都有一个主头文件,其包含了框架内所有的头文件。那么我们就可以仅在代码中#import主头文件,那么就可以使用框架内的所有功能。
就Foundation框架来说其头文件用了近1MB的磁盘存储空间,包含了近14000行代码以及涵盖了100多个文件。但是如果你担心读取每个文件的文本会消耗编辑器大量的时间,那么你就错了。Xcode非常聪明:它使用预编译头文件的方式(一种经过压缩的、摘要形式的头文件),来避免这种问题的产生,从而加快读取速度,以至于加载文件的速度会非常的快。

刚才我们简单的介绍了一下什么是框架。我相信大家最大的疑惑是NSLog()以及@“hello, Objective-C!!!”。接下来,我将会分别介绍这两个新的知识。

NSLog()

NSLog()的作用和C中的printf()作用非常相似:可向控制台输出一些内容。并且与printf()一样,NSLog()接受一个字符串作为其第一个参数,该字符串可以包含格式说明符(如:%d),此函数会接受与格式说明符相匹配的其他参数。注意: 虽然前面说过Objective-C是在C的基础上添加了新的特性,因此你可以用printf()来代替NSLog()函数。但是还是建议使用NSLog(),毕竟其添加了一些新的特性,比如:时间戳、日期戳和自动附加换行符等。

补充:你可能会疑惑NSLog()命名方式有些奇怪。这个NS到底是什么意思?实际上该函数来自于cocoa工具包,cocoa给其所有的函数、常量和类型名称都添加了NS前缀。简单来说,这个前缀就是为了告诉我们这个函数来自cocoa而不是其他工具包。
若你想更深入了解其原因,那么请参阅Objective-C基础教程(第二版)12页内容。

@“hello, Objective-C!!!”

也许你会疑惑字符串前面为什么会出现@符号,是排版错误吗?其实不然,如果引号前有@符号,那么意味着引号内的字符串应作为cocoa的NSString的元素来处理。
那么什么是NSString呢?去掉NS之后会发现就是String,相信你已经猜到了
NSString就是cocoa中的字符串。NSString集成了大量的特性,其还有雨多C风格的字符串无可比拟的功能。关于NSString的详细介绍会在后面的文章中介绍到。

本文是我在学习的过程中编写的,如果有错误的地方希望大家指出,谢谢!!!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值