Почему подкласс NSObject?

Управление версиями является в основном автоматизированной системой резервного копирования, которая позволяет многочисленным пользователям способствовать. Существует абсолютно больше функций, связанных с программным обеспечением как CVS, но да, это - система резервного копирования под капотом. Это не означает, что необходимо вручную скопировать вместо управления версиями использования, тем не менее, они находятся только в той же нише вычислений.

23
задан Chris Hanson 24 November 2009 в 06:03
поделиться

3 ответа

Поскольку объектно-ориентированные языки имеют концепцию наследования, в любой иерархии наследования есть корневой класс. В 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 бесплатно.

14
ответ дан 29 November 2019 в 01:40
поделиться

Все классы не обязательно наследуются от NSObject, но это ядро ​​для многих классов, поскольку оно обеспечивает такие вещи, как выделение, сохранение и освобождение.

6
ответ дан 29 November 2019 в 01:40
поделиться

Мы используем 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);
}
27
ответ дан 29 November 2019 в 01:40
поделиться