一起学Objective-C - 类和对象

本文深入探讨了JavaScript中var与Java中的null、nil的区别,Objective-C的消息传递机制,以及类与对象的概念。进一步解析了Java的继承、重载、抽象类等机制,并对比了Objective-C中的类与Java的类实现方式。同时,介绍了Objective-C中的NSObject类及其提供的服务,包括isa、分配实例、初始化与销毁实例等。此外,文章还详细阐述了Objective-C中的类型判断、getter和setter方法、Class对象及其使用场景。最后,通过示例代码展示了如何在Objective-C中使用Class对象来获取和操作类的信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 ...  

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值