Objective-J简明教程3-2:使用对象和类、导入代码
2009年05月31日 Web开发, 翻译
官方网站原文:Learning Objective-J
了解了Objective-J对象和类的基本情况下,接下来我们看一看如何使用它们。下面的代码创建一个新Person对象,并设置了其name属性:
var myPerson = [[Person alloc] init]; [myPerson setName:"John"];
Objective-J中的方法调用叫做“消息”(messages),为对象发送消息需要使用方括号表示法,如:[object message]。如前所述,有些方法是类方法,要通过类来调用——alloc就是一个类方法。Objective-J中的每个类都有一个名叫alloc的特殊的类方法,该方法返回相应类的一个新实例。
上面的例子在Person类上调用了alloc方法,结果返回了一个Person实例。然后,我们又调用了该实例的init方法。无论alloc还是init都返回一个对象的引用,而我们把这个对象赋给了变量myPerson。就像alloc一样,每个类都会从CPObject继承init方法。
alloc类方法与JavaScript、C++及Java语言中的new关键字相似,都是创建新的实例。而init实例方法则与这些语言中的构造器相似,都是对新创建的实例执行初始化。
有一些会指定自定义的init方法,如CPView的自定义init方法签名如下:
- (id)initWithFrame:(CGRect)aFrame
每个子类都要确保调用其父类的init方法。以下是前面Person类的自定义init方法,该方法直接接收名字参数:
- (id)initWithName:(CPString)aName
{
self = [super init];
if (self)
{
name = aName;
}
return self;
}
首先,调用超类的init方法,结果会返回一个对新初始化实例的引用。此时,必须把这个引用赋值给self变量(以防超类的init方法因新实例而抛弃原始的实例)。然后,检查self确保其正确返回,如果检查通过则执行针对当前类的操作,即把aName赋值给name。最后,返回self以便调用代码获得这个新初始化对象的引用。
Objective-J中的self等价于JavaScript中的this。可以说this引用JavaScript对象,而self引用Objective-J对象。与JavaScript类似,self.foo引用的是foo实例变量;但与JavaScript不同的是,self不是必需的,即可以在任何实例方法中使用foo。
Cappuccino中的很多类都为创建对象提供了一种略有不同的模型,但却更加便捷。在创建对象时,这些类不调用alloc和init,而是实现各自的类方法以返回新对象。注意,在类方法中,self引用类自身。
+ (id)personWithName:(CPString)aName
{
return [[self alloc] initWithName:aName];
}
可以像下面这样调用这个类方法:
var joe = [Person personWithName:"Joe"];
导入代码
JavaScript所欠缺的一种众望所归的特性,就是以像Java或C一样的方式导入代码。对此,Objective-J添加了@import语句:
@import <Foundation/CPObject.j> @import <AppKit/CPView.j> @import "MyClass.j"
有两种类型的导入语句。尖括号表示框架代码,而引号表示本地项目代码。导入框架代码时,会使用内置的搜索路径机制从定义的位置中搜索目标文件。而导入本地代码时,则只会查找与导入文件相关的位置。
为之漫笔(李松峰),本博客专注于Web前后端技术、移动平台开发技术、交互设计和技术翻译。声明一下,因为时常需要外出审稿,而且基本不带笔记本,所以有时可能会迟一点回复大家的留言。
[...] Objective-J简明教程3-2:使用对象和类、导入代码 Objective-J简明教程3-3:内存管理、归类、作用域 五月 26th, 2009 in Web开发, 翻译 [...]
不好意思留下足迹,请博主见谅!
very good site!
[...] Objective-J简明教程3-2:使用对象和类、导入代码 [...]
The internal belted sides can be adjusted to give more space inside.
Old Farmer Johnson was dying. The family was standing around his bed. With a low voice he said to his wife: “When I’m dead I want you to marry farmer Jones.”
Wife: “No, I can’t marry anyone after you.”
Johnson: “But I want you to.”
Wife: “But why?”
Johnson: “Jones once cheated me in a horse deal!”