Object-C学习笔记(一)转载
最近休息在家,闲来无事想搞一个iphone的游戏玩玩,于是买了本 图灵 的 Object-C基础教程 看了看,这本书还算比较基础,里面讲解知识点也比较通俗易懂,尤其是做过一些开发的人,基本上没有什么太大的难点。
真正开始接触 Object-C 跟以前的感受还真是大不相同,以前没怎么接触过Object-C 感觉语法很奇怪,而且由于最开始对Object-C 了解也不多,所以感觉为了一个应用去新学一门语言,而且还是在 apple 系列里的语言有些浪费时间不值得,如今真正去接触了解了后才明白,其实Object-C 是对C的一个扩展而已,里面对C填入了一些新的特性,其实大部分东西跟C还是一样的,本人虽然一直从事web开发,可是却对C是情有独钟,这会有时间用Object-C 写个小游戏其实对C也会有一定程度上的提高。
今天对Object-C 一些语法上的东西做个简单的笔记,方便查询,随时完善更新。
1.Hello World!
所有的语言都是如此,第一个例子基本都是永恒不变的hello world
Object-C里的Hello World其实跟C的Hello World基本上是一样的
|
1
2
3
4
5
6
|
#import <Foundation/Foundation.h>int main(int argc, const char * argv[]){ NSLog(@"Hello World!");} |
import的作用和C中的include的作用基本一样,都说加载一个头文件到当前的代码中,然而Object-C 的 import 加载文件的时候,同一个头文件只会加载一次,这样就不必像C中一样需要用#ifdef 一个 宏来决定是否加载头文件。
Foundation/Foundation.h 这个文件是Cocoa下的 Foundation框架的主头文件,导入这个文件后就可以使用这个框架的很多特性,Foundation框架主要处理的是用户界面层下的一些东西,比如数据通信,功能实现,以及一些数据结构算法的实现等。
NSLog 这个函数和c的printf 基本相同,只不过在printf的基础上增加了一些新的东西,比如自动在结束的时候增加\n换行符,增加了时间戳日期戳等。
NSLog 参数中字符串前面的 @符号表示这个字符串是 Object-C 风格的字符串 数据类型为 NSString 而非C风格的字符串。
2.BOOL布尔类型
Object-C中加入了布尔类型,C中一般表示布尔类型都是 用 0 和 1去表示,而Object-C中的布尔类型 使用 YES 和 NO 两个值来表示的,YES 和 NO其实是一对 signed char类型的数值,类似于 typedef signed char BOOL的定义。
3.类的定义
由于面向对象的思想是部分语言的,所以这里我只标记语法,而不对面向对象做过多的解释和评论。
Object-C的类的定义分为两部分,一部分是接口@interface 部分,另外一部分是 实现@implementation 部分,接口部分个人感觉跟C的头文件的作用类似,主要定义了一些类的成员和方法的原型,而 实现 部分则是对这些接口中声明的具体实现。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
#import <Foundation/Foundation.h>@interface Hero : NSObject{ NSString *iName; int iHP;}- (void) setName:(NSString*) NAME;- (void) setHP:(int) HP;- (void) getInfo;@end@implementation Hero- (void) setName:(NSString*) name{ iName = name;}- (void) setHP:(int) HP{ iHP = HP;}- (void) getInfo{ NSLog(@"PLAYER: %@ HP:%d", iName, iHP);}@end |
@interface 部分 和 @implementation 部分都是由 @end 结束
@interface 的格式为
|
1
2
3
4
5
6
|
@interface 类名:基类{ 成员变量列表}方法原型列表@end |
@implementation 的格式为
|
1
2
3
4
5
6
|
@implementation 类名{ 成员变量列表}方法实现@end |
Object-C 的方法由 - 开始(如果以 + 开始,则表示该方法必须用类名调用,类似于PHP的静态函数) 接着是 返回值类型 函数名 : 参数列表
|
1
2
3
4
|
- (返回值类型) 方法名:参数列表{ 方法体} |
如果该方法没有参数列表部分则没有冒号,由于@interface 部分只是方法原型的一个声明,并没有具体的实现,所以没有方法体,直接以分号结束。
类的实例化以及调用
|
1
2
3
4
|
Hero *DJ = [Hero new];[DJ setHP:100];[DJ setName:@"死亡骑士"][DJ getInfo]; |
方法多个参数的声明和调用方法都很怪
|
1
2
|
- (void) setStyle:(int) font setColor:(int) RGB; |
|
1
2
|
[obj setStyle:SONGTI setColor:REDCOLOR] |
方法的调用必须指明参数的名称,第一个参数的名称为方法名,其余为声明时候所制定的名称。

浙公网安备 33010602011771号