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基本上是一样的

#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 charBOOL的定义。

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]


方法的调用必须指明参数的名称,第一个参数的名称为方法名,其余为声明时候所制定的名称。

http://my.oschina.net/fuckphp/blog/92993

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值