对象和结构类似。
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;
}