首页 > 代码库 > 黑马程序员 00-OC基本语法概述

黑马程序员 00-OC基本语法概述


 1.OC简介

 Objectuve-C 简称OC,其中Objective是面向对象的意思,即面向对象C。

 

  1. C语言的基础上,增加了一层最小的面向对象的方法(保留了面向对象语法的精华部分)
  2. 完全兼容C语言

 

以下代码写在OC源文件(.m文件)中,说明OC程序完全兼容C语言

 

#include <stdio.h>

// OC程序的入口:main函数

// OC程序完全兼容C语言

int main(intargc, const char* argv[])

{

    printf("第1个OC程序\n");

    return 0;

}

 

  1. 可以在OC代码中混入C语言代码,甚至是C++代码

 

以下仅作了解即可

.m文件中既可以写OC代码又可以写C代码,完全可以混在一起;

.mm文件可以写C++代码。

 

  1. 可以使用OC开发Mac OS X平台和iOS平台的应用程序。

 

2.OC语法概览

 

(1)OC关键字

  1. 基本上所有关键字都是以@开头
  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"是OC中的字符串,而"Hello"则是C语言中的字符串。

 

(3)其他语法

 

 

图片

 

3.OC程序的开发过程

与C语言相似:

 

图片

 

编译的作用:检测语法,如果语法正确,编译成功,生成.o目标文件;

链接的作用:把项目中所有相关联的.o目标文件跟C语言函数库合并在一起,生成一个可执行文件(a.out)。

 

 

本节重点

  1. OC程序完全兼容C语言。
  1. 基本上所有关键字都是以@开头,少部分特殊关键字不是以@开头。
  2. OC字符串以@开头。
  3. 编译的作用:检测语法,如果语法正确,编译成功,生成.o目标文件。
  4. 链接的作用:把项目中所有相关联的.o目标文件跟C语言函数库合并在一起,生成一个可执行文件(a.out)。

 

二、第1个OC程序

 

1、代码编写

       跟C语言一样,OC程序的入口是main函数,只不过是写在OC的源文件(.m文件)中。

比如这里的第一个OC main.m文件中(文件名可以是中文):

 

#include <stdio.h>

// OC程序的入口:main函数

// OC程序完全兼容C语言

int main(intargc, const char* argv[])

{

    printf("第1个OC程序\n");

    return 0;

}

 

2、终端指令

  1. 编译 cc -c main.m
  2. 链接 cc main.o
  3. 运行 ./a.out

 

本节重点

  1. OC程序的入口:main函数
  2. 终端指令
    • 编译 cc -c main.m
    • 链接   cc main.o
    • 运行   ./a.out

 

 

三、第2个OC程序

 

C语言使用printf函数输出内容;OC语言使用NSLog函数输出内容。

 

1、代码编写

以下是第二个OC程序: 

#import <Foundation/Foundation.h>

 

int main()

{

    //NSLog输出内容会自动换行

 //@和""之间不能有空格

    NSLog(@"第2个OC程序!!!");  

    return 0;

}

 

2、终端指令

  1. cc  -c main.m
  2. cc main.o framework Foundation

(只有用到了Foundation框架才需要加上-framework Foundation)

  1. 运行 ./a.out

 

3、NSLog 和 printf 的区别

 

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

 

4、#import的作用

 

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

#ifndef    _STDIO_H_

#define   _STDIO_H_

#endif

 

//NSObjCRuntime.h中有NSLog函数的声明

#import <Foundation/NSObjCRuntime.h>

 

<>中 /之前的部分表示的是框架, /之后的部分表示的是框架内部的 .h头文件

 

5、Foundation框架的作用

 

  #import <Foundation/Foundation.h>

 

  1. 开发OC、iOS、Mac程序必备的框架
  2. 此框架中包含了很多常用的API(应用程序接口)
  3. 框架包含了很多头文件,若想使用整个框架,包含它的主头文件即可
  4. Foundationl框架的存放路径:
    • 右击Xcode.app --> 显示包内容
    • /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/Foundation.framework/Headers
  1. 主头文件
    • 主头文件:最主要的头文件,名字一般跟框架名称一样,包含了框架中的所有其它头文件
    • Foundation框架的主头文件名称就是Foundation.h
    • 只需要包含Foundation框架主头文件,就可以使用整个框架的东西

 注意:不要随便增删东西

6、BOOL类型的使用(C语言中没有BOOL类型)

  • BOOL类型的本质

    BOOL类型的本质其实是char

    typedef signed char BOOL

  • BOOL类型有两种取值:YES、NO

    #define YES (BOOL)1

    #define NO  (BOOL)0

  • BOOL的输出(当做整数来输出) 
  • NSLog(@"%d %d", YES,NO);

编写代码如下:

 1 #import <Foundation/Foundation.h> 2  3 //BOOL做返回值类型,返回NO 4 BOOL test(BOOLmybool) 5 { 6     return NO; 7 } 8  9 int main(intargc, const char* argv[])10 11 {12    BOOL b = YES;13    BOOL b2 = NO;14    BOOL b3 = 1;// YES15    BOOL b4 = 0;// NO16 17     NSLog(@"b =%d", b);//结果为b = 118 19     NSLog(@"b2 = %d", b2);//结果为b2 = 020 21     NSLog(@"b3 = %d", b3);//结果为b3 = 122 23     NSLog(@"b4 = %d", b4);//结果为b4 = 024 25     NSLog(@"%d", test(YES));//结果为026 27     return 0;28 29 }

 

  

本节重点

  1. C语言使用printf函数输出内容;OC语言使用NSLog函数输出内容,并且NSLog输出内容会自动换行。
  2. NSLog输出语句中@和""之间不能有空格。
  1. 只有用到了Foundation框架,链接的时候才需要加上-framework Foundation。
  2. #import可以自动防止文件内容被拷贝多次,以后都用#import。
  3. 只需要包含Foundation框架主头文件,就可以使用整个框架的东西。

 

黑马程序员 00-OC基本语法概述