黑马程序员——从C语言到OC

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

ios开发(包括iphone和ipad上的应用)使用的是objective-c这种语言,OC语言诞生于1986年,也是一门较为古老的语言。OC是完全兼容C语言的,也就意味着C语言中所有的语法特性在OC中都是可以使用的,所以很多用C语言开发的库和函数,是可以在OC语言中直接使用的(这也是OC语言中大部分关键字使用@开头的原因,主要是为了在同一文件中区分C和OC代码)。但是OC的基本语法职工又有不同于C语言的部分。本文主要介绍一些C语言开发到OC语言开发转变过程中疑惑的部分:

1.文件的扩展名为什么是.m?

    Objective-C刚诞生的时候,扩展名.m代表message,指的是Objective-C的一个主要特性。因为oc是一种不同于c语言(面向过程)的面向对象语言,类或对象的方法都是以消息的形式传递,而不是简单地函数,因此在Objective-C这门语言中处处有传递消息的代码(其实 就是在调用类方法),所以OC源文件以.m为扩展名。

2.基本数据类型中增加了BOOL类型

    BOOL类型是一种取值只有真和假的数据类型,在其他语言中非常常见,Objective-C为了弥补C语言中缺乏的bool类型,使用C语言中得typedefine关键字定义了一种新的BOOL类型:

 

[objc]  view plain copy
 
  1. typedef signed char BOOL;  

并且定义了两种取值

 

[objc]  view plain copy
 
  1. #define YES             ((BOOL)1)  
  2. #define NO              ((BOOL)0)  


这样在遇到判断真假的时候,就可以使用BOOL类型,而不需再使用没有实在意义的0和1。

 

3.nil类型

   Objective-C中的nil类型相当于在C语言中的NULL类型,在Xcode中按住command键进入.h头文件可以看到对nil类型的宏定义

 

[objc]  view plain copy
 
  1. #   define nil __DARWIN_NULL  

 

[objc]  view plain copy
 
  1. #define __DARWIN_NULL ((void *)0)  


由上面的两段定义可知OC中得nil与C语言中得NULL是基本相同的。

 

但是由于OC是面向对象的语言,nil不仅可以表示基本数据类型和指针类型中的0的含义,而且还可以表示一个没有值的类类型,因此OC中得nil用法更加丰富,所以建议要再OC程序中使用nil,而不再使用C语言中的NULL。

4.#import预处理命令

 

    作用跟#include一样,用来拷贝某个文件的内容,但是为什么不用#include而使用新增的#import。

因为在OC中的#import指令有更加丰富的功能

#import是GCC编译器提供的Xcode在编译Objective-C、C和C++程序时都会使用它,#import可保证头文件只包含一次,而不论此命令实际上在那个文件中出现了多少次。

 

#import可以自动防止文件内容被拷贝多次,也就以为着头文件中不用像编写C语言程序时加入下面的繁琐的预处理指令了

 

[objc]  view plain copy
 
  1. #ifndef _STDIO_H_  
  2. #define _STDIO_H_  
  3. #endif  

 

因此以后再编写oc程序时,可以放心大胆地抛弃#include指令。

5.OC中的关键字和字符串类型

在OC语言大部分关键字都以@开头,其中最常见的关键字有下面几个:

 

[objc]  view plain copy
 
  1. @interface、@implementation、@end   
  2. @public、@protected、@private、@selector   
  3. @try、@catch、@throw、@finally    
  4. @protocol、@optional、@required、@class  
  5. @property、@synthesize、@dynamic  
  6. self、super、id、_cmd、__block、__strong、__weak、  


OC语言中的字符串不同于C语言中得字符串,它不是简单的字符数组,而是以@开头的包装类型(类类型)

 

 

比如@"Hello"是OC中的字符串,而"Hello"则是C语言中的字符串

6..基本输出函数NSLog

Objective-C中有比C语言中更高级的输出函数NSLog主要的区别如下

 

 

Ø   NSLog接收OC字符串作为参数,printf接收C语言字符串作为参数

Ø   NSLog输出后会自动换行,printf输出后不会自动换行

Ø   使用NSLog需要#import <Foundation/Foundation.h>

Ø   使用printf需要#include<stdio.h>

 

7.Foudation框架

    在OC语言中,使用的类、结构体、和函数被定义在.h文件中(而实现则放在了.m文件中),一些公司或者个人开发了一些具有特定功能的框架(framework),里面有许多.h和.m文件,而要使用这些框架或者框架中得某些函数、类或结构体必须使用#import关键字引入包含他们的头文件,而以框架名命名的主头文件包含了这个框架中所有的函数、类和结构体的声明(在不知道要具体添加哪个头文件时,通常添加主头文件即可),例如

#import<Foundation/Foundation.h>

意味着要添加Foundation框架下的Foundation.h文件其中框架名和头文件以"/"隔开。

几乎所有的OC程序都要添加Foundation框架,因为

 

Ø   Foundation开发OC、iOS、Mac程序必备的框架

Ø   此框架中包含了很多常用的API(应用编程接口)

8.如何编译和链接OC文件

如同前面的C语言编程,要想让oc程序运行起来,也要三步走,即:编译->链接->执行。但是和C语言稍微有点不同

就是在链接阶段 需要添加OC程序中使用的框架(指明–framework参数),例如:

 

Ø   编译:cc –cmain.m test.m

Ø   链接:cc main.otest.o –framework Foundation

Ø   运行:./a.out

9.一个完整的OC程序

    总结前面所介绍的内容,可以不再对OC程序陌生了,下面是一个完整的OC版的Hello World

 

[objc]  view plain copy
 
  1. #import <Foundation/Foundation.h>  
  2.   
  3. int main(int argc, const charchar * argv[])  
  4. {  
  5.   
  6.     NSLog(@"Hello, World!");  
  7.     return 0;  
  8. }  


打开终端cd到文件所在的目录,然后

 

编译:

 

[plain]  view plain copy
 
  1. cc -c hello.m  


链接:

 

 

[plain]  view plain copy
 
  1. cc hello.o -framework Foundation  


执行:

 

 

[plain]  view plain copy
 
  1. ./a.out  


终端屏幕上显示:

 

Hello, World!

转载于:https://www.cnblogs.com/qiang0901/p/4466935.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值