2013-04-18 2 views
0

Существует простой код объекта-C фрагмент я получил от проекта IOS:частный интерфейс и множественная реализация

@interface store (private) 

@end 

@implementation store (private) 

@end 

@implementation store 

Мои вопросы:

  1. Что (private) значит в коде, частный интерфейс & реализация?

  2. Что означает последняя строка @implementation store? Пустая публичная реализация? Без @end?

  3. Поскольку в приведенном выше коде есть два @implementation store, означает ли это, что цель-c поддерживает множественную реализацию для одного интерфейса?

ответ

0

private ничего не значит, в Objective-C, вы называете это peanuts, если вы хотите. Это действительно ярлык для дифференциации категорий, если у вас несколько, но это значение произвольно. Это просто означает что-то для вас как разработчика.

Строка @implementation store обозначает начало реализации для класса, определенного @interface store (т. Е. Ни одна категория), которая, вероятно, объявлена ​​в файле .h. Это факт, что интерфейс находится в «.h», что делает его общедоступным (потому что другие классы могут импортировать файл .h и, следовательно, видеть объявление свойств, методов и т. Д.).

Он не поддерживает множество реализаций, они являются аддитивными. Конечно, тогда у вас есть вопрос о реализации того же метода в обоих. Apple категорически не приветствует. Вот doc.

Избегайте Категория Имя метода Столкновения

Поскольку методы, объявленные в категории добавляются к существующему классу, вы должны быть очень осторожны, об именах методов.

Если имя метода, объявленного в категории, является таким же, как метод в исходном классе, или метод в другой категории одного класса (или даже суперкласса), поведение не определено относительно того, какой метод реализация используется во время выполнения. Это менее вероятно, будет проблемой, если вы используете категории с вашими собственными классами, но могут создавать проблемы при использовании категорий для добавления методов в стандартные классы Cocoa или Cocoa Touch.

0
  1. Это в objective-c category, что позволяет добавлять код к существующему классу. Имя в parens произвольно.
  2. Это пустая реализация, но я удивлен, что она компилируется без @end. Попробовав xcode с настройками компилятора по умолчанию, я получаю сообщение об ошибке. Если только для ясности, он должен иметь @end.
  3. Первая реализация - дополнение к первому. Вы можете использовать его для разбиения больших классов на отдельные модули, чтобы сделать части интерфейса доступными для некоторых, а не для других, или - наиболее полезно и обычно - добавлять методы к классам SDK.
1
  1. What does (private) mean in the code, private interface & implementation? - (private) означает, что вы decalring/реализации Objective-C category. В этом случае private - это просто имя. Это не имело бы значения, если он был store (myPrivateMethods)

  2. What does the last line @implementation store mean? An empty public implementation? Without @end? - @implementation store фактическая часть реализации класса store. Не уверен, что произойдет, если отсутствует @end.

  3. Since there are two @implementation store in above code, does that mean objective-c support multiple implementation for a single interface? - На самом деле не существует 2 варианта применения store. Существует одна реализация класса store и одна реализация категории этого класса - store (private).

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