Object-C学习笔记(一)

最近休息在家,闲来无事想搞一个iphone的游戏玩玩,因而买了本 图灵 的 Object-C基础教程 看了看,这本书还算比较基础,里面讲解知识点也比较通俗易懂,尤为是作过一些开发的人,基本上没有什么太大的难点。 web

真正开始接触 Object-C 跟之前的感觉还真是大不相同,之前没怎么接触过Object-C 感受语法很奇怪,并且因为最开始对Object-C 了解也很少,因此感受为了一个应用去新学一门语言,并且仍是在 apple 系列里的语言有些浪费时间不值得,现在真正去接触了解了后才明白,其实Object-C 是对C的一个扩展而已,里面对C填入了一些新的特性,其实大部分东西跟C仍是同样的,本人虽然一直从事web开发,但是却对C是情有独钟,这会有时间用Object-C 写个小游戏其实对C也会有必定程度上的提升。 算法

今天对Object-C 一些语法上的东西作个简单的笔记,方便查询,随时完善更新。 数据结构

1.Hello World! app

全部的语言都是如此,第一个例子基本都是永恒不变的hello world  框架

Object-C里的Hello World其实跟C的Hello World基本上是同样的 iphone

#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框架主要处理的是用户界面层下的一些东西,好比数据通讯,功能实现,以及一些数据结构算法的实现等。 spa

NSLog 这个函数和c的printf 基本相同,只不过在printf的基础上增长了一些新的东西,好比自动在结束的时候增长\n换行符,增长了时间戳日期戳等。 code

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的头文件的做用相似,主要定义了一些类的成员和方法的原型,而 实现 部分则是对这些接口中声明的具体实现。

#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 的格式为

@interface 类名:基类
{
    成员变量列表
}
方法原型列表
@end
@implementation 的格式为
@implementation 类名
{
    成员变量列表
}
方法实现
@end
Object-C 的方法由 - 开始(若是以 + 开始,则表示该方法必须用类名调用,相似于PHP的静态函数) 接着是 返回值类型 函数名 : 参数列表
- (返回值类型) 方法名:参数列表
{
    方法体
}
若是该方法没有参数列表部分则没有冒号,因为@interface 部分只是方法原型的一个声明,并无具体的实现,因此没有方法体,直接以分号结束。

类的实例化以及调用

Hero *DJ = [Hero new];
[DJ setHP:100];
[DJ setName:@"死亡骑士"]
[DJ getInfo];

方法多个参数的声明和调用方法都很怪

- (void) setStyle:(int) font
         setColor:(int) RGB;
[obj setStyle:SONGTI
     setColor:REDCOLOR]
方法的调用必须指明参数的名称,第一个参数的名称为方法名,其他为声明时候所制定的名称。
相关文章
相关标签/搜索