关于实例的困惑

时间:2014-06-08 06:28:58

标签: ios objective-c class methods

我认为我对BNR书中的方法和课程有足够的把握,现在我已经达到了关于它的章节的结尾(在发送不良信息'下)

  

如果您将日期类方法发送到 NSDate 会发生什么情况   实例或 timeIntervalSince1970 实例方法 NSDate   类?

我现在该死的,我觉得NSDate是一个班级?为什么它在这里被称为实例呢? Aren的实例只是在类/对象中找到的变量?什么是实例方法呢?

1 个答案:

答案 0 :(得分:0)

实例方法是可以在类的实例上调用的方法,并使用“ - ”字符定义:

- (void)instanceMethod;

类方法是一种不需要类实例的方法,可以在类本身上调用(用'+'定义):

+ (void)classMethod;

问题是如果在类上调用实例方法会发生什么,反之亦然(类的实例上的类方法):

[NSDate timeIntervalSince1970]; // Instance method (timeIntervalSince1970) called on the class itself (NSDate)

NSDate *dateInstance = [NSDate date]; // NSDate instance defined as dateInstance;
[dateInstance date]; // class method (date) called on an instance of NSDate

编辑:

关于评论中的汽车示例。如果Car是一个类,并且您想要创建一个名为volvo的类的实例:

Car *volvo = [[Car alloc] init]; 

关于类变量,如果在实现文件中有一个变量的静态声明,那么它将与所有实例共享(即在一个实例中更改它,它将反映在所有其他实例中)。

如果它被声明为成员实例(即非静态并在您的类中声明),那么每个类实例它将是唯一的。