Слишком много C-стиля в программах Objective C?

Если Вы чувствуете, что пачкаете руки, то Вам или промыли мозги или все еще чувствуете после влияния "лет DHTML". JavaScript очень мощен, и подходит хорошо для его цели, которая должна написать сценарий стороны клиента интерактивности. Поэтому JavaScript 2.0 получил такой плохой рэп. Я имею в виду, почему пакеты, интерфейсы, классы, и т.п., когда те - ясно аспекты языков серверной стороны. JavaScript очень хорошо как основанный на прототипе язык, не будучи полноценным объектно-ориентированный.

, Если существует отсутствие прозрачности к Вашим приложениям, потому что серверная сторона и клиентский не связывается хорошо, тогда Вы могли бы хотеть пересмотреть, как Вы проектируете свои приложения. Я работал с чрезвычайно устойчивыми веб-сайтами и веб-приложениями, и я никогда не говорил, "Хм, мне действительно жаль, что JavaScript не мог сделать (xyz)". Если бы это могло бы сделать это, то это не был бы JavaScript - это будет ActionScript или AIR или Silverlight. Мне не нужно это, и ни один не делает большинство разработчиков. Те - хорошие технологии, но они пытаются решить проблему с технологией, не... хорошо, решение.

7
задан GuidoMB 9 December 2009 в 05:22
поделиться

5 ответов

Первая проблема, с которой я столкнулся, заключается в том, что я не знаю, где провести черту между 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 и работающих аналогичным образом. Удачи!

3
ответ дан 6 December 2019 в 07:51
поделиться

Обязательно используйте . Вы не можете оплачивать накладные расходы на отправку сообщений для функций, которые выполняются за 30 циклов. В этот момент даже накладные расходы на вызов функций кажутся довольно большими.

В более общем плане, используйте столько или меньше C-стиля, сколько захотите. Я видел Objective-C, который был не чем иным, как парой модулей C, склеенных вместе с сообщениями цели C, и я видел Objective-C, который по существу не содержал строк кода без квадратных скобок. Я видел красивый и эффективный код, написанный обоими способами. Хороший код - это хороший код, как бы вы его ни писали.

11
ответ дан 6 December 2019 в 07:51
поделиться

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

6
ответ дан 6 December 2019 в 07:51
поделиться

Постарайтесь использовать каждый язык для того, в чем он хорош. IMHO, это будет включать объекты Obj-C, но методы реализации C-подобного кода. Поэтому используйте math.h и краткий код C для реализации логики, но не стесняйтесь использовать классы Obj-C для организации ваших более крупных функциональных блоков во что-то, что имеет смысл.

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

3
ответ дан 6 December 2019 в 07:51
поделиться

Как уже упоминалось, не существует реального протокола для абстрактных классов коллекций (кроме протокола NSFastEnumeration , который предоставляет для (элемента идентификатора в коллекции) ], когда реализован), но есть соглашения, которым необходимо следовать.

Apple Введение в рекомендации по кодированию для какао охватывает некоторые из них, и на самом деле существует раздел по именованию методов сбора, который охватывает общие случаи (хотя обратите внимание, что общий контейнер в таких классах, как NSArray , используется термин «объект», а не «элемент», перечисленный в приведенных там примерах, т.е. addObject: , removeObject: и т. д.

Следование шаблонам, перечисленным здесь (среди других), действительно имеет решающее значение, если вы хотите, чтобы ваши классы были KVC-совместимыми,что позволяет другим пользователям наблюдать за изменениями свойств вашего объекта.

0
ответ дан 6 December 2019 в 07:51
поделиться