没有合适的资源?快使用搜索试试~ 我知道了~
iPhone游戏编程 Objective-c 教程
4星 · 超过85%的资源 需积分: 9 26 下载量 51 浏览量
2012-02-21
22:39:04
上传
评论
收藏 423KB PDF 举报
温馨提示
试读
18页
objective-c 入门,有关iPhone游戏开发基础,iOS游戏开发必备教程。
资源推荐
资源详情
资源评论
作者邮箱: mc0066@gmail.com 作者 QQ:1300915166
至读者
!
对于大家不难想象,对于最初步入 IT 行业的程序员们来说,完全不了解这个行业,
第一份所从事的工作并不一定能成为自己以后会喜欢的工作。09 年秋天,我还在
计算机学校做辅导老师时,接到了来自北京的电话。来电话的人是一位 20 出头的
年轻老板,他在北京和朋友一同经营一家从事 MTK 手机游戏开发的公司,他问我
是否有兴趣去北京工作,我当时立刻就同意了。转眼 2 年的时光过去了,虽然我已
经离开了那家公司,到了一所从事 IPHONE 游戏开发的公司。但是,我很清楚如
果我最初能更加了解这个行业的话,我一定可以去一个自己喜欢 也更加有希望 当
然,同时也为科技进步 为了让人类享受更加高质量的服务去做贡献。IPHONE 是
一个很棒的平台,对于用户它是一个无论硬件还是软件都很漂亮、很强大、很易用
的手机,对于开发者来说 它是一个更加简单 更加稳定的一个开发平台。我和大多
数人一样相信移动互联网是未来,而在 IPHONE 上开发应用和游戏也将会让人无
比的兴奋。但是 作为程序员来说,首先你要学好 Objective-C ^^
!
!
类的定义
Objective-C的类由2部分所组成:
1. @interface (接口) - 定义了类的组成结构,通常写在.h文件中。
2. @implementation (实现) - 包含类方法的实现代码,通常写在.m文件中。
你可以这样来写interface:
@interface ClassName : ParentClass {
type var1;//对象变量
...
type varN;
}
- (id)initClassName;//对象方法
@end
@interface代表一个类定义的开始,而@end则代表类定义的结束。@符号是
Objective-C引入的,用于和C语言代码区分,这样当编译器发现@符号时就知道这
是Objective-C代码而不是C代码了。
接下来,我们分析一下上面的代码:
ClassName:是类的名字,它是一个标示符,你可以根据标示符命名规则任意取名
字。不过,最好是首字母大写的形式,因为这是一种很好的代码风格。
ParentClass:这是父类的名字,Objective-C中每个类都只能有1个父类,也就是说
Objective-C是一种“单继承”的语言。
{}:大括号中包含的是对象变量,这些变量的默认访问权限为protected,也就是说
只能对象方法可以使用它们。不过你可以指定访问权限,比如:public、
private,之后会介绍这些。
- (id)initClassName;:它是属于对象的方法,成员方法的访问权限都是
public,也就是说在任何地方都可以访问到,你是无法改变它的。
现在我们看看OC中方法原型是什么样子的:
- (returnType)methodName:(type)par1 label1:(type)par2;
是不是看上去很繁琐?
不用担心,等你了解了就不觉得繁琐了 反而会喜欢这种语法^^
我们从左向右分析以下它:
-:减号代表该方法是一个对象方法,也就是说只有实例化之后才能调用它。如果
是加号(+)那就表示方法是属于类的,通过类就可以直接调用它,不用实例化。我
们以上面代码来举个例子:
//正确的调用方法
ClassName *obj = [[ClassName alloc] init];//先实例化对象
[obj method:1 label1:2];//然后再调用方法
//错误的调用方法
[ClassName method:1 label1:2];//把method当做类方法来调用了!
returnType:方法返回值的类型,可以是基本类型:int、float,也可以是对象类
型。
methodName:方法名,它就是一个标示符,建议采用第一个单词小写之后单词首
字母大写的形式,还是编码规范^^
(type)par1 label1:(type)par2;:这些是方法的参数列表,参数间使用空格间隔,
label1是标签,你可以借此告诉调用者该参数的用途。这个参数是可以省略的,所
以上面的方法也可以写成:
- (returnType)methodName:(type)par1 :(type)par2;
那么你会问了,为什么第一个参数没有标签啊?
其实 是有的,第一个参数的标签就是方法名。这个方法的真正名字不是
methodName,而是methodName:label1或methodName:(省略label1时)。
interface(接口)写好了,下面我们该写implementation(实现)了:
@implementation ClassName
- (id)initClassName {
self = [super init];
if(self) {
初始化你的对象变量
}
return self;
}
@end
在OC中使用@implementation关键字来定义类的实现,和@interface一样也使
用@end表示定义的结束。
这里的ClassName就是你在@interface中写的类名,必须要一样,否则编译器可
能会提示:“找不到类的定义”。
我们来分析一下上面的代码:
id:这是OC中的泛型,其实它就是一个void *,也就是说id类型的变量可以指向
任何类型的对象。
self:它表示当前对象,在上面它就表示ClassName类型的对象。self和JAVA中
的this是同样的作用。你可以在对象方法里引用对象的变量和其它方法,比如:
self.var1 = 10;
[self method];
上面代码中self接收初始化之后的对象,然后判断是否初始化成功,成功则返回
给调用者。
super:代表父类。
构造方法
现在,你已经知道如何去写类了,接下来我们学习如何来实例化对象。OC通过构
造方法来创建对象,构造方法和普通的方法没什么不同,不过 通常它都有一些固
定的步骤。
1.申请内存 - [self alloc]
2.初始化对象 - [super init]
3.设置对象变量
4.返回已创建对象 - return self
我们来看看构造方法的样子把,下面是它的基本组成结构:
- (id)构造方法名 {
self = [super init];//调用父类init方法初始化当前对象
if(self) {
这里来初始化你的成员变量
}
return self;//返回已创建的对象
}
是不是觉得 self = [super init];不太好理解?其实,你这样写也没问题:
- (id)构造方法名 {
[super init];//调用父类init方法初始化当前对象
if(self) {
这里来初始化你的成员变量
}
return self;//返回已创建的对象
}
因为self本来就是指向当前对象的,而[super init]初始化也是在当前对象空间
初始化的,因为父类的init函数我们也继承了。
对象的构造方法写好了,接下来看看如何通过构造方法来创建对象:
ClassName *obj = [[ClassName alloc] initClassName];
initClassName就是ClassName的构造方法,这条代码执行之后obj就是我们所创建的
对象,之后你可以使用obj来使用对象的变量和方法。
剩余17页未读,继续阅读
资源评论
- wanjuan122014-08-26一般般,没什么用
- samchu2202014-05-04这个书确实一般,不如cookbook
- gxf57848282012-12-17貌似没什么太大的用处
- bzmeteor2012-07-30貌似没什么太大的用处,最基本的编程,和游戏没怎么沾边
xuhui8265
- 粉丝: 0
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功