2010-07-30 2 views
1

Я заметил, что классы Cocoa/Objective-C наследуют и соответствуют другим классам. Я понимаю, что такое наследование, но не соответствие. Какая разница?Соответствие против наследования в классах Cocoa/Objective-C

Кроме того, является ли класс UIView классом какао или классом Objective-C?

ответ

2

Классы не соответствуют классам, они соответствуют protocols, которые являются в основном списками сообщений, на которые может отвечать класс. Если класс соответствует протоколу, он должен отвечать на все необязательные сообщения, перечисленные в интерфейсе протокола.

Кроме того, нет разницы между классом Cocoa и классом Objective-C. Какао - это Objective-C framework, поэтому все его классы - классы Objective-C. Если вы спрашиваете, являются ли такие классы, как UIView, частью языка или рамки: каждый класс, с которым вы обычно взаимодействуете в приложении Cocoa/Cocoa Touch, поступает из фреймворка. Родные классы стандартной среды выполнения Objective-C обеспечивает являются:

  • Объект
  • протокол
  • Список

Вы можете перейти в каталог/USR/включать/ObjC, если вы хотите увидеть заголовки для себя. Ни один из них не используется в обычной программе Cocoa или Cocoa Touch. Вы используете протоколы (как упоминалось выше), но обычно не обращаетесь непосредственно к классу.

+0

Я видел, что все соответствует NSObject. Разве это не объект, а не проткол? –

+0

@awakeFromNib: Это и то, и другое. Существует класс NSObject и протокол NSObject, которому соответствует класс. Класс: http://developer.apple.com/mac/library/documentation/Cocoa/Reference/Foundation/Classes/NSObject_Class/Reference/Reference.html Протокол: http://developer.apple.com/mac/library/documentation /Cocoa/Reference/Foundation/Protocols/NSObject_Protocol/Reference/NSObject.html#//apple_ref/occ/intf/NSObject – Chuck

+0

Что такое «Список»? не может найти его в моей рабочей среде – user102008

1

Соответствие или более точное соответствие протоколу - это просто способ Objective C указать поведение, которое должен реализовать класс, подобно интерфейсу java.

UIView является частью рамок UIKit, поэтому он является классом Cocoa.

+0

Нет, UIView является частью рамки UIKit, поэтому это класс * Cocoa Touch *. UIKit не является частью Cocoa. –

+0

Да, я стою исправлено .... – ennuikiller

1

Соответствие более или менее совпадает с назначаемостью. Но я никогда не видел, чтобы этот второй термин использовался для этого.

Если вы можете назначить объект переменной b, то a соответствует b.

+1

За исключением того, что в Objective-C вы можете назначить указатель на экземпляр любого класса на любую переменную-указатель, включая переменную, объявленную как удерживающую указатель на экземпляр полностью несвязанного класса , –

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