2013-09-17 2 views
1

Я программист C++ & 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]; 

обычно первая часть является тип объекта, а вторая часть метод Прошу прощения, если это плохой вопрос bu Я очень хочу понять Objective-C с самого начала. Благодаря

+1

Если вы знаете, C++, то это ничем не отличается от вызова ' Класс :: classMethod() 'и' myClass.instanceMethod() '. Прежде чем изучать язык, просмотрев код, прочтите следующее: https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/Introduction/Introduction.html – trojanfoe

+0

ОК, но почему мы можем это сделать NSDate * now = [NSDate date]; ??? – satyres

+0

, потому что '-timeIntervalSince1970' - это метод _instance_, а не метод _class_. если бы это был метод класса, вы бы сделали то, что хотели. – holex

ответ

0

Вы можете сделать что-то подобное с

[NSDate timeIntervalSinceReferenceDate]; 

Хотя базисная дата в данном случае 1 января 2001

Но это метод класса. Вы можете назвать это в классе.

Другие методы, такие как timeIntervalSince1970, представляют собой методы экземпляра, которые необходимо вызывать для реальных объектов класса. В случае NSDate не существует метода класса для временного интервала с 1970 года.

Если вы действительно хотите, вы можете добавить категорию в NSDate и добавить метод класса, который делает это.

0

Это метод класса:

NSDate *now = [NSDate date]; 

Вам не нужен экземпляр объекта.

Это метод экземпляра:

[now timeIntervalSince1970]; 

И вам нужно, и экземпляр объекта.

То же самое в C++ как: класс :: classMethod() и MyClass :: instanceMethod()

Больше информации здесь:

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

+0

Они называются «статическими» в Objective-C? – trojanfoe

+1

Nope. Чтобы избежать такого рода путаницы, термины - методы класса и методы экземпляра. Чтобы быть педантичным, в Objective-C нет статических методов – Abizern

Смежные вопросы