首页 > 代码库 > 黑马程序员 00-OC基本语法概述
黑马程序员 00-OC基本语法概述
1.OC简介
Objectuve-C 简称OC,其中Objective是面向对象的意思,即面向对象C。
- C语言的基础上,增加了一层最小的面向对象的方法(保留了面向对象语法的精华部分)
- 完全兼容C语言
以下代码写在OC源文件(.m文件)中,说明OC程序完全兼容C语言
#include <stdio.h>
// OC程序的入口:main函数
// OC程序完全兼容C语言
int main(intargc, const char* argv[])
{
printf("第1个OC程序\n");
return 0;
}
- 可以在OC代码中混入C语言代码,甚至是C++代码
以下仅作了解即可
.m文件中既可以写OC代码又可以写C代码,完全可以混在一起;
.mm文件可以写C++代码。
- 可以使用OC开发Mac OS X平台和iOS平台的应用程序。
2.OC语法概览
(1)OC关键字
- 基本上所有关键字都是以@开头
- 下面列举一些常见的关键字,看一眼就行了,不用去翻资料查找它们的含义
@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)。
本节重点
- OC程序完全兼容C语言。
- 基本上所有关键字都是以@开头,少部分特殊关键字不是以@开头。
- OC字符串以@开头。
- 编译的作用:检测语法,如果语法正确,编译成功,生成.o目标文件。
- 链接的作用:把项目中所有相关联的.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、终端指令
- 编译 cc -c main.m
- 链接 cc main.o
- 运行 ./a.out
本节重点
- OC程序的入口:main函数
- 终端指令
- 编译 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、终端指令
- cc -c main.m
- cc main.o framework Foundation
(只有用到了Foundation框架才需要加上-framework Foundation)
- 运行 ./a.out
3、NSLog 和 printf 的区别
- 使用NSLog需要#import <Foundation/Foundation.h>
- 使用printf需要#include <stdio.h>
- NSLog接收OC字符串作为参数,printf接收C语言字符串作为参数
- NSLog输出后会自动换行,printf输出后不会自动换行
4、#import的作用
- 跟#include一样,用来拷贝某个文件的内容
- 可以自动防止文件内容被拷贝多次,也就意味着头文件中不用加入下面的预处理指令了
#ifndef _STDIO_H_
#define _STDIO_H_
#endif
//NSObjCRuntime.h中有NSLog函数的声明
#import <Foundation/NSObjCRuntime.h>
<>中 /之前的部分表示的是框架, /之后的部分表示的是框架内部的 .h头文件
5、Foundation框架的作用
#import <Foundation/Foundation.h>
- 开发OC、iOS、Mac程序必备的框架
- 此框架中包含了很多常用的API(应用程序接口)
- 框架包含了很多头文件,若想使用整个框架,包含它的主头文件即可
- Foundationl框架的存放路径:
- 右击Xcode.app --> 显示包内容
- /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/Foundation.framework/Headers
- 主头文件
- 主头文件:最主要的头文件,名字一般跟框架名称一样,包含了框架中的所有其它头文件
- 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 }
本节重点
- C语言使用printf函数输出内容;OC语言使用NSLog函数输出内容,并且NSLog输出内容会自动换行。
- NSLog输出语句中@和""之间不能有空格。
- 只有用到了Foundation框架,链接的时候才需要加上-framework Foundation。
- #import可以自动防止文件内容被拷贝多次,以后都用#import。
- 只需要包含Foundation框架主头文件,就可以使用整个框架的东西。
黑马程序员 00-OC基本语法概述