Если Вы чувствуете, что пачкаете руки, то Вам или промыли мозги или все еще чувствуете после влияния "лет DHTML". JavaScript очень мощен, и подходит хорошо для его цели, которая должна написать сценарий стороны клиента интерактивности. Поэтому JavaScript 2.0 получил такой плохой рэп. Я имею в виду, почему пакеты, интерфейсы, классы, и т.п., когда те - ясно аспекты языков серверной стороны. JavaScript очень хорошо как основанный на прототипе язык, не будучи полноценным объектно-ориентированный.
, Если существует отсутствие прозрачности к Вашим приложениям, потому что серверная сторона и клиентский не связывается хорошо, тогда Вы могли бы хотеть пересмотреть, как Вы проектируете свои приложения. Я работал с чрезвычайно устойчивыми веб-сайтами и веб-приложениями, и я никогда не говорил, "Хм, мне действительно жаль, что JavaScript не мог сделать (xyz)". Если бы это могло бы сделать это, то это не был бы JavaScript - это будет ActionScript или AIR или Silverlight. Мне не нужно это, и ни один не делает большинство разработчиков. Те - хорошие технологии, но они пытаются решить проблему с технологией, не... хорошо, решение.
Первая проблема, с которой я столкнулся, заключается в том, что я не знаю, где провести черту между ObjC и C.
Мое правило - использовать C везде, где это имеет для вас смысл. Objective-C имеет то преимущество, что позволяет вам выбирать, когда быть процедурным, а когда - объектно-ориентированным. Выбирайте то, что лучше всего подходит для кода, который вы пишете.
Еще одна вещь, которую я не смог найти, - это протокол коллекции [...] Я хочу реализовать класс дерева выражений, и я хочу знать, есть ли методы, которые все коллекции должны быть реализованы (как в Java), или я должен вручную проверить каждую коллекцию и посмотреть, есть ли метод, который должен иметь моя коллекция.
В отличие от Java, Objective-C не имеет главного протокола для коллекций, подобных интерфейс java.util.Collection . Кроме того, нет t распространение конкретных реализаций контейнеров, как в Java. Однако это дает вам свободу реализовать коллекцию способом, который имеет смысл для вашего кода.
Для построения древовидной структуры вы можете взглянуть на NSTreeNode , чтобы увидеть, может ли это быть полезным для использования. (Это может быть больше, чем вам нужно или нужно, но, возможно, стоит попробовать.)
Что касается прокрутки вашей собственной коллекции, я многому научился при создании CHDataStructures.framework , и вы можете использовать из этого кода все, что захотите, или просто посмотрите на мои попытки создания какао-подобных структур, предназначенных для дополнения коллекций Foundation и работающих аналогичным образом. Удачи!
это дает вам свободу реализовать коллекцию таким образом, который имеет смысл для вашего кода.Для построения древовидной структуры вы можете взглянуть на NSTreeNode , чтобы узнать, может ли это быть полезным использовать. (Это может быть больше, чем вам нужно или нужно, но, возможно, стоит попробовать.)
Что касается прокрутки вашей собственной коллекции, я многому научился при создании CHDataStructures.framework , и вы можете использовать из этого кода все, что вам нравится, или просто посмотрите на мои попытки создания какао-подобных структур, разработанных для дополнения коллекций Foundation и работающих аналогичным образом. Удачи!
это дает вам свободу реализовать коллекцию таким образом, который имеет смысл для вашего кода.Для построения древовидной структуры вы можете взглянуть на NSTreeNode , чтобы узнать, может ли это быть полезным использовать. (Это может быть больше, чем вам нужно или нужно, но, возможно, стоит попробовать.)
Что касается прокрутки вашей собственной коллекции, я многому научился при создании CHDataStructures.framework , и вы можете использовать из этого кода все, что вам нравится, или просто посмотрите на мои попытки создания какао-подобных структур, разработанных для дополнения коллекций Foundation и работающих аналогичным образом. Удачи!
но, возможно, стоит попробовать.)Что касается прокрутки вашей собственной коллекции, я многому научился при создании CHDataStructures.framework , и вы можете использовать все, что захотите, из этого кода , или просто посмотрите на мои попытки создания какао-подобных структур, предназначенных для дополнения коллекций Foundation и работающих аналогичным образом. Удачи!
но, возможно, стоит попробовать.)Что касается прокрутки вашей собственной коллекции, я многому научился при создании CHDataStructures.framework , и вы можете использовать все, что захотите, из этого кода , или просто посмотрите на мои попытки создания какао-подобных структур, предназначенных для дополнения коллекций Foundation и работающих аналогичным образом. Удачи!
Обязательно используйте
. Вы не можете оплачивать накладные расходы на отправку сообщений для функций, которые выполняются за 30 циклов. В этот момент даже накладные расходы на вызов функций кажутся довольно большими.
В более общем плане, используйте столько или меньше C-стиля, сколько захотите. Я видел Objective-C, который был не чем иным, как парой модулей C, склеенных вместе с сообщениями цели C, и я видел Objective-C, который по существу не содержал строк кода без квадратных скобок. Я видел красивый и эффективный код, написанный обоими способами. Хороший код - это хороший код, как бы вы его ни писали.
Как правило, вы будете использовать функции C для численных расчетов. Обычно вы будете использовать объекты для большинства других целей. Причина этого в том, что объекты намного тяжелее простого скаляра - от этого просто нет пользы. Зачем вам писать [[NSNumber numberWithInteger: 1] numberByAddingNumber: [NSNumber numberWithInteger: 2]]
, если вы можете просто написать 1 + 2
? Это не только больно читать, это намного медленнее и ничего не дает.
С другой стороны, в Какао есть богатые библиотеки объектов для строк, массивов, сетей и многих других областей, и их использование - большая победа.
Знание того, что там есть, и, следовательно, самый простой способ что-то сделать - это просто вопрос обучения. Если вы думаете, что что-то должно быть там, и не можете этого найти, вы можете спросить здесь или в списке рассылки Apple Cocoa-Dev.
Что касается протокола сбора - его на самом деле нет. Наиболее близким к нему является протокол NSFastEnumeration, который определяет ровно один метод: countByEnumeratingWithState: objects: count:
. Это позволяет использовать синтаксис for (id someObject in someCollection)
для перечисления объектов в коллекции. В противном случае все коллекции определяют свои собственные независимые интерфейсы.
for (id someObject in someCollection)
для перечисления объектов в коллекции. В противном случае все коллекции определяют свои собственные независимые интерфейсы. Это позволяет использовать синтаксис for (id someObject in someCollection)
для перечисления объектов в коллекции. В противном случае все коллекции определяют свои собственные независимые интерфейсы. Постарайтесь использовать каждый язык для того, в чем он хорош. IMHO, это будет включать объекты Obj-C, но методы реализации C-подобного кода. Поэтому используйте math.h и краткий код C для реализации логики, но не стесняйтесь использовать классы Obj-C для организации ваших более крупных функциональных блоков во что-то, что имеет смысл.
Кроме того, попробуйте взаимодействовать с фреймворками, используя их стиль, чтобы вы не работали в восходящем направлении.
Как уже упоминалось, не существует реального протокола для абстрактных классов коллекций (кроме протокола NSFastEnumeration
, который предоставляет для (элемента идентификатора в коллекции)
], когда реализован), но есть соглашения, которым необходимо следовать.
Apple Введение в рекомендации по кодированию для какао охватывает некоторые из них, и на самом деле существует раздел по именованию методов сбора, который охватывает общие случаи (хотя обратите внимание, что общий контейнер в таких классах, как NSArray
, используется термин «объект», а не «элемент», перечисленный в приведенных там примерах, т.е. addObject:
, removeObject:
и т. д.
Следование шаблонам, перечисленным здесь (среди других), действительно имеет решающее значение, если вы хотите, чтобы ваши классы были KVC-совместимыми,что позволяет другим пользователям наблюдать за изменениями свойств вашего объекта.