1. 类似于javascript中var的id 和类似于java中null的nil。
2. 消息, Objective-C中不说某个对象调用了它的某个方法,而是说某个对象为了响应一个消息而执行了某个方法。
最简单的 [receiver messagename];
带参数的 [button setFrameOrigin: 10.0 : 10.0];
带参数标签的[button setWidth: 20.0 height: 122.0];
用变量做参数的[receiver makeList: list, argOne, argTwo, argThree];
3. 类似于Java的继承,重载,抽象类等机制
Class Cluster - 包含一个抽象的基类和一组私有的子类。用来隐藏具体实现。具体用途再研究,不过NSString就是一个Class Cluster.
4. 类似于Java中Object的NSObject
NSObject是根类,他为所有的对象提供了很多服务:
- isa
- 分配实例
- 连接实例和它所属的类
- 初始化实例
- 销毁实例
- 跟其他对象比较
- archive自己
- 执行在运行时选择的方法
- 提供信息来查询已经声明过的方法
- 提供信息来查询它在整个继承结构中位置的信息
- 传递消息到其他的对象
5. 类似于Java中instanceof的类型判断
if ([namedObject isMemberOfClass: specificClass] == YES)
{
//namedObject必须是specificClass的对象
}
if ([namedObject isKindOfClass: specificClass] == YES)
{
// namedObject是specificClass的对象或者specificClass的某个子类的对象
}
6. 类似于Java的getter和setter
- (int) value
{
return value;
}
- (void) setValue: (int) newValue
{
value = newValue;
}
7. 有点类似于Java的Class对象
Class本身在内部维护一个实例,这个实例不能被用户来创建和销毁,但是他们可以响应消息
id result = [SomeClassName doSomething];
你可以用下面的方式来获得对象的实例, 下面的方法返回是相同的。
id stringClass1 = [stringObject class];
Class stringClass2 = [stringObject class];
id stringClass3 = [NSString class];
获得Class的版本号 int versionNumber = [NSString version];
如果一个对象名在编译时并不可见,可以在运行时通过下面的代码来获取它。
if ([anObject isKindOf: NSClassFromString("SomeClassName")] == YES)
{
// do something ...
}