黑马程序员——解构Hello Objcetive-C程序

来源:互联网 发布:万科华润宝能大战知乎 编辑:程序博客网 时间:2024/06/07 00:22
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

      Xcode通过.m扩展名来表示文件使用的是Objective-C代码,应由Objective-C编译器处理。而C编译器处理.c文件,C++编译器处理.cpp文件。在Xcode中,所有这些编译工作默认由LLVM处理,这个编译器能够理解C语言的全部3个变体。

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

1.#import语句

      

     与C语言一样,Objective-C使用头文件来包含结构体、符号常量和函数原型等元素的声明。在C语言中我们用#include语句来通知编译器查询头文件中相应的定义代码。在Objective-C中我们也可以使用#include来达到同样的目的。一般你会这样使用#import语句:

#import <Foundation/Foundation.h>

       

      #import是由Xcode使用的编译器提供的,Xcode在编译你的Objective-C、C和C++程序时都会使用它。#import可保证头文件只被包含一次,无论此命令在该文件中出现了多少次。

这里的#import  <Foundation/Foundation.h>语句告诉编译器查找Foundation框架中的Foundation.h头文件。

注意:在C语言中,程序员通常使用基于#ifdef命令的方案来避免一个文件包含另一个文件而后者又包含前者的情况。

      而在Objective-C中,程序员使用#import命令来实现这个功能。


2.框架


      框架是一种把头文件、库、图片、声音等内容聚集在一个独立单元中的集合体。苹果公司将Cocoa、Carbon、QuickTime和OpenGL等技术作为框架集来提供。Cocoa的组成部分有Foundation和 Application Kit(也称为App Kit)框架。此外还有一套支持型框架,包含了Core Animation和Core Image,它们为Cocoa增添了许多精彩的功能。               Foundation框架处理的使用界面之下的那些层(Layer)的特征,比如数据结构和通信机制。
      每个框架都是一个重要的技术集合,通常包含数十个甚至上百个头文件。每个框架都有一个主头文件,它包含了框架内的所有的头文件。通常在主头文件中使用#import,就可以访问框架内的所有功能。
Foundation框架的头文件占用了近1MB的磁盘空间,包含了14000多行代码,涵盖了100多个文件。只要使用#import <Foundation/Foundation.h>来包含主头文件,就能获得整个集合。这里,Xcode使用预编译头文件(一种经过压缩的、摘要形式的头文件)来加快读取速度,通过#import导入这种文件时,加载速度会非常快。

 如果你想知道Foundation框架中包含那些头文件,可以查看其Headers目录(/System/Library/Frameworks/Foundation.framework/Headers/)。


3.NSLog()和”字符串”


      使用 #import 导入了Foundation框架的主头文件后,就可以开始使用Cocoa特性来编写代码了。Hello Objective-C中的第一行实际代码使用了NSLog()函数,如下所示:

NSLog(@” Hello ,Objective-C!”);
      此代码可向控制台输出Hello ,Objective-C! 。这里的NSLog()和C语言中的printf()作用是相似的。与printf()一样, NSLog()接受一个字符串作为其第一个参数,该字符串包含格式说明符(比如%d),此函数会接受与格式说明符相匹配的其他参数。printf()在输出之前会把这些参数插入到第一个字符串参数中。

  NSLog()会添加一些其他的特性,比如时间戳、日期戳和自动附加换行符(’\n’)等。

  1. 避免名称冲突的NS前缀

       Cocoa给其所以的函数、常量和类型名称都添了NS前缀。使用前缀能避免名称冲突(就是两个不同事物使用相同标识符时会引发的错误)。如果Cocoa将这个函数命名为Log(),那么这个名称很可能会和某个不清楚情况的程序员创建的Log()函数发生冲突。当包含Log()的程序和包含同名函数的Cocoa一起构建时,Xcode会警告 Log()被多次定义,并可能产生糟糕的结果。


2.  NSString:@是本体


       在NSLog(@” Hello ,Objective-C!”);中@符号是Objective-C 在标准的C语言基础上添加的特性之一。@符号意味着引号内的字符串应作为Cocoa的NSString 元素来处理。
       去掉NS前缀,你会看到一个熟悉的术语:String(字符串)。字符串是一串连续的可理解的字符,所以你一定能准确地猜到NSString就是Cocoa中的字符串。

       NSString元素集成了大量的特性,在需要用字符串时,通过Cocoa随时可以使用它们。下面列出NSString所支持的部分功能:

       告诉你它的字符串长度是多少;

       将自身与其他字符串进行比较;

       将自身转换成整形值或浮点值。

       此外,它还有C语言无可比拟的功能。NSString的又一绝妙之处是,名称本身就是Cocoa的多个有点特性之一。大多数Cocoa元素都以非常直接的方式命名,名称就可以反映出它们所能实现的功能。例如NSArray存放数组,NSDateFormatter帮助你用不同的方式来设置时间格式,NSThread提供多线程工具,而NSSpeechSynthesizer能够让你听到语音。

       程序的最后一行是返回语句return (0),它可以终止main()函数的执行并结束这个程序。



0 0
原创粉丝点击