【问题标题】:Objective C programming, passing message to NSDateObjective C 编程,将消息传递给 NSDate
【发布时间】:2016-01-26 20:49:23
【问题描述】:

我正在关注一本关于 Objective-C 的书,并遇到了这个使用 NSLog 语句打印当前日期的示例。我很困惑为什么 NSDate 类在将日期消息传递给它之前没有实例化(alloc 和 init)。

NSDate * pointerToIt = [NSDate date];

在代码的下方,另一条消息被传递给这个指针..

[pointerToIt timeIntervalSince1970];

我所知道的是,只要指针持有类实例的地址,消息就可以发送给它,但该类从未实例化,并且消息仍在传递。有人可以帮我解释一下吗?

【问题讨论】:

    标签: objective-c nsdate


    【解决方案1】:

    date 是一种获取当前日期的特殊方式。它是NSDate 类上的一个静态方法,它执行以下操作:

    创建并返回设置为当前日期和时间的新日期。
    此方法使用类的默认初始化方法 init。

    您的代码与文档中的代码几乎相同:

    NSDate *today = [NSDate date];
    

    因此,today 对象实际上已隐式正确初始化。

    【讨论】:

      【解决方案2】:

      [NSDate date] 为你做了allocinit。如果您参考documentation,您将阅读。

      创建并返回设置为当前日期和时间的新日期。

      【讨论】:

        【解决方案3】:

        [NSDate date] 是一个类工厂方法。在内部,它看起来像这样:

        + (instancetype)date {
            return [[self alloc] init];
        }
        

        【讨论】:

        • 不,它不使用该初始化程序作为它使用 init 的文档。
        • 哎呀。已更正,谢谢。两者都会产生相同的结果。
        • 那么,它前面的小 + 符号表示该方法是类工厂方法吗?并且所有前面带有 + 的方法都不需要显式启动,因为它们已经在内部启动了。我说对了吗?
        • + 表示该方法是类方法。 (不一定是工厂方法。) - 表示该方法是实例方法。
        猜你喜欢
        • 2017-02-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-10
        • 2011-05-10
        相关资源
        最近更新 更多