Управление версиями является в основном автоматизированной системой резервного копирования, которая позволяет многочисленным пользователям способствовать. Существует абсолютно больше функций, связанных с программным обеспечением как CVS, но да, это - система резервного копирования под капотом. Это не означает, что необходимо вручную скопировать вместо управления версиями использования, тем не менее, они находятся только в той же нише вычислений.
Поскольку объектно-ориентированные языки имеют концепцию наследования, в любой иерархии наследования есть корневой класс. В Java родительский класс по умолчанию (если не указан) - java.lang.Object
, тогда как в Objective-C, если вы явно не объявляете родительский класс, вы его не получаете. По сути, ваш класс сам становится корневым. Это распространенная ошибка среди новичков в Objective-C, поскольку в таких случаях вы обычно хотите наследовать от NSObject.
Хотя это часто вызывает проблемы и сбивает с толку, на самом деле это дает некоторую гибкость, поскольку вы можете определять свои собственные иерархии классов, которые действуют совершенно иначе, чем NSObject. (Java вообще не позволяет вам этого делать.) С другой стороны, если вы не знаете, что делаете, таким образом легко попасть в неприятности. К счастью, компилятор выдаст предупреждения, если вы вызовете метод, не определенный классом без объявленного родительского класса, например те, которые вы обычно ожидаете унаследовать от NSObject.
Что касается «использования» NSObject, ознакомьтесь с документацией класс NSObject и протокол NSObject . Они определяют общие методы, используемые для выделения объектов, управления памятью, сравнения, хеширования, печати описаний, проверки принадлежности к классам, запроса, отвечают ли объекты на селектор, и т. Д. В принципе, NSObject «хорош для» обеспечения основных функций объектов Objective-C бесплатно.
NSObject, ознакомьтесь с документацией по классу NSObject и протоколу NSObject . Они определяют общие методы, используемые для выделения объектов, управления памятью, сравнения, хеширования, печати описаний, проверки принадлежности к классам, запроса, отвечают ли объекты на селектор, и т. Д. В принципе, NSObject «хорош для» обеспечения основных функций объектов Objective-C бесплатно. NSObject, ознакомьтесь с документацией по классу NSObject и протоколу NSObject . Они определяют общие методы, используемые для выделения объектов, управления памятью, сравнения, хеширования, печати описаний, проверки принадлежности к классам, запроса, отвечают ли объекты на селектор и т. Д. В принципе, NSObject «хорош для» обеспечения основных функций объектов Objective-C бесплатно.Все классы не обязательно наследуются от NSObject, но это ядро для многих классов, поскольку оно обеспечивает такие вещи, как выделение, сохранение и освобождение.
Мы используем NSObject, чтобы явно указать, что класс наследуется от. Я не уверен насчет C ++, но в Java есть нечто подобное - класс Object. Единственное отличие состоит в том, что Java не требует, чтобы классы явно происходили от Object - язык предполагает, что все, что не имеет указанного родительского класса, происходит от Object. Objective-C отличается тем, что позволяет вам определять разные корневые классы - вам разрешено создавать класс, который не наследуется от NSObject.
Примером такого другого корневого класса является NSProxy
.
Взгляните на исходный код GNUstep NSObject , он показывает, как методы взаимодействуют со средой выполнения objective-c через функции C.
+ (id) allocWithZone:(NSZone*)z
{
return NSAllocateObject(self, 0, z);
}
- (void) dealloc
{
NSDeallocateObject (self);
}
+ (BOOL) isSubclassOfClass: (Class)aClass
{
return GSObjCIsKindOf(self, aClass);
}