OC简介与基础语法

本文介绍了Objective-C的基础知识,包括OC的起源、语法规范、开发过程和工作原理。OC使用消息结构,支持面向对象编程,常见关键字如@interface、@implementation等。文章通过多个简单程序示例,演示了OC代码的编写、编译、链接和运行过程,同时对比了OC与C语言的差异,以及OC中NSLog与printf的区别。

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

一、OC简介

OC全称 Objective-C,它通过一套全新的语法,在C语言基础上添加了面向对象的特性。OC语法频繁的使用方号,而且不吝于写出极长的方法名,虽然代码冗长,但十分易读。OC完全兼容C语言,且可以在OC代码中混入C语言代码,甚至是C++代码。我们可以使用OC开发Mac OS X平台和IOS平台的应用程序。

OC语言使用的是“消息结构”(messaging structure)而非函数调用(function calling)。OC语言是由Smalltalk演化而来的,后者是消息型语言的鼻祖。消息与函数调用之间的区别看上去就像这样:

//消息结构
Object *obj =  [Object new];
[obj performWith:parameter1and:parameter2];
//函数调用
Object *obj = new Object;
obj->perform(parameter1,parameter2);

关键的区别在于:使用消息结构的语言,其运行时所应执行的代码由运行环境来决定;而使用函数调用的语言,则由编译器决定。

在OC中经常会用到几个概念,编译期,运行期与运行期环境。

编译期是指把的源文件交给编译器编译的过程,最终目的是得到可执行的文件。运行期是指可执行文件交给操作系统执行、直到程序执行结束的期间,执行的目的是为了实现程序的功能。运行期环境是指当应用程序运行起来后,为其提供相关支持的代码,它提供了一些使得对象之间能够传递消息的重要函数,并且包含创建类实例所用的全部逻辑。

二、OC语法的规范

1、关键字:基本上所有关键字都是以@开头的

 一些常见的关键字有:

@interface、@implementation、@end @public、@protected、@private、@selector @try、@catch、@throw、@finally  @protocol、@optional、@required、@class @property、@synthesize、@dynamic、 self、super、id、_cmd、__block、__strong、__weak、

2、字符串都是以@开头,

例如:@“hello world”

而C语言的字符串是“hello world”。

3、其他的语法

     基本数据类型:char int float double BOOL(YES\NO)

     nil:相当于C语言中的null

     基本语句:循环语句(do while、while、for),条件语句(if、if-else、switch)

     注释://和/*...*/

     屏幕输出语句:

NSLog(@"hello");

NSLog(@"age is %i",27);

三、OC的开发过程

     

源文件:原文件就是指用OC写出来的代码保存为文件的结果

目标文件:目标文件是指源文件经过编译程序产生能被cpu直接识别的二进制文件

可执行文件:可执行文件就是指目标文件经过链接之后产生的可以在系统上执行的文件

四、第一个OC程序

1、代码编写:OC语言的入口是main函数,它写在 .m文件中

比如说在.m文件中写入如下代码

 #include <stdio.h>
     int main() { 
        printf("第1个OC程序\n"); 
        return 0;
      }

这是在oc里写c语言,照样能够编译运行。

2、终端指令:

   编译:cc –c main.m

   链接:cc main.o

   运行:./a.out

   执行的结果是在屏幕上打印 :第一个OC程序

五、第二个OC程序

1、 以OC代码写的main.m文件  

#import<Foundation/Foundation.h>
      int main(){
          NSLog(@"第2个OC程序");
         return 0;
      }

2、终端指令

    编译:cc –c main.m          

    链接:cc main.o –framework Foundation           

    运行:./a.out

    由于使用了NSLog函数,所以需要引入框架文件 #import<Foundation/Foundation.h>,同时也要告诉编译器使用了框架 –framework Foundation

3、NSLog与printf的区别:

   NSLog接收OC字符串作为参数且输出后会自动换行,printf接收C语言字符串作为参数输出后不会换行,使用NSLog需要#import <Foundation/Foundation.h>,使用printf需要#include <stdio.h>;

4、#import的作用

   跟#include一样,用来拷贝某个文件的内容,可以自动防止文件内容被拷贝多次,也就意味着头文件中不用加入以下的预处理指令   

#ifndef     _STDIO_H_          
#define     _STDIO_H_         
 #endif

5、Foundation框架 

    开发OC、iOS、Mac程序必备的框架 ,此框架中包含了很多常用的API(应用编程接口)和头文件,若想使用整个框架的内容,只需包含它头文件Foundation.h即可,例如:

#import <Foundation/Foundation.h>

6、BOOL的使用 

BOOL类型的本质:

typedef signed char BOOL;

BOOL类型的变量有2种取值:YES、NO 

#define YES (BOOL)1
#define NO  (BOOL)0 
这两条指令会将程序中所有BOOL类型的1替换为YES,0则替换为NO   

BOOL的输出(当做整数来用) 

NSLog(@"%d %d", YES, NO);

六、第三个OC程序

1、多个.m文件开发

编写3个文件

main.m文件:

#import "one.h" 
int main() {
    test();
     return 0;
 }

one.h 文件:

void test();

one.m文件:
#import <Foundation/Foundation.h> 
void test(){     
	NSLog(@"调用了test函数");
        //NSLog函数会自动换行
 }
该函数的输出结果是:调用了test函数

终端指令

   编译:cc –c main.m test.m//必须同时编译所有文件才能成功

   链接:cc main.o test.o –framework Foundation 

   运行:./a.out

2、m文件和.c文件混用开发

编写3个文件

main.m 文件:

#import "one.h" 
int main() {
     test();
     return 0;
 }

one.h 文件:

void test();

one.c文件:

#include <stdio.h> 
void test() {
    printf("调用了test函数\n");
 }

该程序的输出结果同样是:调用了test函数

终端指令 

   编译:cc –c main.m test.m 

   链接:cc main.o test.o

   运行:./a.out //没有使用Foundation框架的话,就不用-framework Foundation

七、Object-C的工作原理

     Object-C的重要工作都在“运行期组件”(runtime component)而非编译器完成的。使用OC的面向对象特性所需的全部数据结构和函数都在运行期组件里面。比如说:运行期组件中含有全部内存管理方法。运行期组件本质上是一种与开发者所编代码相链接的“动态库”(dynamic library),其代码能把开发者编写的所有程序粘合起来,这样的话,只需要更新运行期组件,即可提升应用程序性能。而像C++和JAVA那种许多工作都在“编译期”(compile time)完成的语言,若要获得类似性能提升,则要重新编译应用程序代码。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值