1

私は c++ & c プログラマーであり、objective-C の世界に慣れていないので、それがどのように機能するかを理解するのに問題があります。ここに短いコードがあり、私を混乱させました。

#import <Foundation/Foundation.h>
int main (int argc, const char * argv[])
{
    @autoreleasepool {
NSDate *now = [NSDate date];
NSLog(@"The date is %@", now);
double seconds = [now timeIntervalSince1970];
NSLog(@"It has been %f seconds since the start of 1970.", seconds);
}
return 0; }

今はオブジェクト型 NSdate へのポインタです 私の質問は、なぜこれができないのかということです:

   double seconds = [NSDate timeIntervalSince1970];

通常、最初の部分はオブジェクトの型で、2 番目の部分はメソッドです。悪い質問でしたら申し訳ありませんが、Objective-C を最初からよく理解したいと思っています。ありがとう

4

2 に答える 2

0

同様のことができます

[NSDate timeIntervalSinceReferenceDate];

この場合の基準日は 2001 年 1 月 1 日ですが、

しかし、これはクラスメソッドです。クラスで呼び出すことができます。

timeIntervalSince1970 などの他のメソッドはインスタンス メソッドであり、クラスの実際のオブジェクトで呼び出す必要があります。NSDate の場合、1970 年以降の時間間隔のクラス メソッドはありません。

本当に必要な場合は、NSDate にカテゴリを追加し、これを行うクラス メソッドを追加できます。

于 2013-09-17T16:28:36.483 に答える
0

これはクラスメソッドです:

NSDate *now = [NSDate date];

オブジェクトのインスタンスは必要ありません。

これはインスタンスメソッドです:

[now timeIntervalSince1970];

そして、オブジェクトのインスタンスが必要です。

C++ で Class::classMethod() および myClass::instanceMethod() と同じ

詳細はこちら:

https://softwareengineering.stackexchange.com/questions/191856/what-is-a-static-method-compared-to-instance-class-private-public-methods

于 2013-09-17T16:28:47.663 に答える