对象和结构类似。

struct(结构){member(成员)};

 

object(对象){methods(方法)一种可以使用实例变量(ivars)的函数

        ivars(实例变量)}

类(classes)

类负责描述某个特定类型的对象,其中包括方法实例变量。类可以描述以下两种对象。

  • 抽象概念,例如数据,字符串或指令集。
  • 实际存在的事物,例如人,地点或储蓄账户。

 

关于对象图(object diagrams)的注意事项:类一般都使用虚线来画,例如Person类。实例一般使用实线画。这是画类以及类的实例的惯例。

具体见(oc第二版p88)。

 

使用对象的实例:


以上是一条华丽的分割线,我们继续说;

方法和消息

NSDate *now=[NSDate date]

解读这一段代码的意思:

NSDate类中有一个date方法。在刚刚写的代码中,你向NSDate发送了date消息,让它执行了date方法。

(NSDate是类,date既是消息也是方法)

这是一条发送消息的语句;

 

消息发送

消息发送(指令)必须写在一对方括号([])中,并且必须包含接收方(receiver)选择器(selector)

NSDate *now=[NSDate date]

NSDate; 接收方:指针,指向接收消息的对象的地址

date;  选择器:方法名,要触发的方法的方法名

 

发送date消息要做什么呢?date方法执行后,NSDate类会在堆上给NSDate实例声明一部分内存,将NSDate实例初始化为当前的日期/时间,然后返回新对象(NSDate实例)的地址。

 

类方法与实例方法

比较一下一下两条消息;

NSDate *now=[NSDate date]//接收方为NSDate,选择器为date(类方法)

double seconds=[now timeIntervalSince1970]//接收方为now,选择器为timeItervalSince1970(实例方法)

第一条消息:

我们给NSDate类发送了date消息。date是一个类方法(class methods)。通常来说,类方法会创建类的实例,并初始化实例变量。

 

第二条消息:

而在第二条消息发送指令中,我们给now变量指向的NSDate实例发送了timeIntervalSince1970.timeIntervalSince1970是一个实例方法(instance methods)。

通常来说,实例方法会提供实例中实例变量的信息,或是对实例的实例变量进行操作。

 

Challenge

试编写一个基于Foundation的Command Line Tool,输出你计算机的名字。这个程序使用Foundation框架中的两个类:NSHots和NSString.

  首先,获取一个拥有你计算机信息的NSHost实例。然后,向NSHost对象询问计算机的名字。最后,使用NSLog()打印出计算机名。

  以下是你可能需要知道的一些细节:

  •   发送currenHost消息给NSHost类,以此来获取NSHost实例。
  •       获取NSHost实例之后,向它发送localizedName消息。localizedName方法向NSString实例返回一个指针。然后,将返回的结构存储到类型为NSString *的变       量中。
  •       使用NSLog()以及格式说明符@%,输出计算机名字。

#import <Foundation/Foundation.h>

 

int main(int argc, const char * argv[]) {

    @autoreleasepool {

            NSString *name=[[NSHost currenHost]localizedName];//这里用了嵌套发送

            NSLog(@"这台电脑的名字叫做%@",name);

           }

      return 0;

                    }