您的位置:首页 > 编程语言 > C语言/C++

黑马程序员——OC语言学习——第一天

2015-03-08 03:08 323 查看
————————Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ————————

Objective-C的是编写 OS X和iOS软件 的主编程语言。一般将OC看成是C编程语言的一个超集。 Objective-C继承了C语言的语法,基本数据类型和程序控制流程,并在此基础上增加了语法定义的类和方法,并提供面向对象的功能和动态运行。所有它对C语言是完全兼容的。

在C语言中我们使用一些系统自带的函数需要用 #include<头文件> 包含头文件,在OC中也是一样,只不过在OC中我们使用#import。

#import和#include一样:<> : <系统文件> 、 "" : " 自己写的文件"

#import 和 #include一样都有拷贝文件内容的作用,只不过增加一个功能,就是防止文件内容重复拷贝。也就在声明文件中不需要再写预处理指令 -->条件编译了,

在C语言中我们预防文件重复拷贝是通过

# ifndef 宏定义

# define 宏定义

文件内容

#endif

OC中的字符串是这种新式: @“OC字符串”, 比C语言多个@

OC中输出语句则变成 NSLog

NSLog比print有个新功能就是会在结束时自动换行

NSLog是系统自带函数需要调用系统文件则要包括头文件:Foundation/NSObjeCRuntime.h文件

NSObjeCRuntime.h中包含NSLog函数的声明,它也是属于Foundation框架的。

Foundation框架的头文件路径是:Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/Foundation.framework

我们在上述路径中回看到很头文件,如果一个个包含会非常麻烦,这时就利用到我们的主头文件。Foundation.h 它包含了Foundation框架中的所有头文件

下次我们在写头文件包含只需要 #import <Foundation/Foundation.h>

我们在终端调试OC时,用的命令行和C语言也不一样,

编译: cc -c

链接: cc 文件名 -framework Foundation 编译链接一起来,也是cc 文件名 -framework Foundation

运行: ./a.out

第二个OC程序

<span style="font-size:14px;">#import <Foundation/Foundation.h>

int main()
{
// NSLog输出内容会自动换行
NSLog(@"第2个OC程序!!!");

return 0;
}</span>


OC也可以像C语言一样文件包含。多个文件一起编译。

OC中的BOOL类型 YES ==1 NO ==0

BOOL类型的本质

typedef
signedchar
BOOL;

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

#define YES (BOOL)1
#define NO (BOOL)0

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

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

OC是作为一个面向对象的语言。

面对对象思想:就像是简单的创造一个“生命”,你赋予他属性和行为,如果要利用他的行为,就可以直接调用他来完成你所要完成的行为,其中他的属性可以被你改变。

万物皆是对象,将事物的共性抽象成为类

用类来创建对象,所以我们要先学会创建类

第一个类

1.类的设计:包含类的,名字,属性,功能。
-->类名
*类名的第一个字母必须是大写
*不能有下划线
*多个英文单词,用驼峰标识

类分为两个部分,和写一个函数一样,需要声明和实现两个部分。
1、类的声明
包括:类的属性,类的行为、功能的声明
格式:
@interface 类名 :父类
@end

2、类的实现
就是将声明里的方法、功能,写出来。
格式:
@implementation
类名
@end

例子:写一个车类
类名:Car
属性:轮胎个数,时速(速度)
行为:跑
<span style="font-size:14px;">// 1.类的声明
// 声明对象的属性、行为
// : NSObject 目的是:让Car这个类具备创建对象的能力
@interface Car : NSObject
{// 用来声明对象属性(实例变量\成员变量,默认会初始化为0)
// @public可以让外部的指针间接访问对象内部的成员变量
@public
int wheels; // 轮胎个数
int speed; // 时速(xxkm/h)
}

// 方法(行为):方法名、参数、返回值(声明、实现)
// 只要是OC对象的方法,必须以减号 - 开头
// OC方法中任何数据类型都必须用小括号()扩住
// OC方法中的小括号():括住数据类型
- (void)run;

@end

// 2.类的实现
// 用来实现@inteface中声明的方法
@implementation Car
// 方法的实现(说清楚方法里面有什么代码)

- (void)run
{
NSLog(@"车子跑起来了");
}

@end</span>


对象的创建:在OC中我们利用类来创建对象

现在我们用上面写好的Car类创建一个Car对象 : [Car new]

[Car new] 每次都会创建一个新的对象,并且放回新对象本身

在OC中我们用指向对象的指针来存储对象: Car *p = [Car new];

如何给对象的属性赋值

这有点像C语言的结构体

比如调用给Car对象的速度属性赋值:p-->speed = 30;

OC中调用对象行为

格式:[行为执行者 行为名称];

比如调用Car跑的行为:[p run];

类和对象的内存结构图



这是一个人类。创建了两个人对象,分别用p,和p2两个指针指向两个人对象。用人类创建出来的对象里面都有一个isa指针。来指向类。在这里就是人类。

我们创建的对象中只存储属性,不存储方法,在调用方法的时候回到类中调用。

对象方法和函数注意点

方法

1.对象方法都是以减号 -

2.对象方法的声明必须写在@interface和@end之间

对象方法的实现必须写在@implementation和@end之间

3.对象方法只能由对象来调用

4.对象方法归类\对象所有

函数

1.函数能写在文件中的任意位置(@interface和@end之间除外),函数归文件所有

2.函数调用不依赖于对象

3.函数内部不能直接通过成员变量名访问某个对象的成员变量

没有指针指向的对象叫匿名对象,最好别写。后面内存管理会说。

————————Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ————————
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐