Как Objective C выдерживает сравнение с C#? [закрытый]

Маршрутизатор
, Если проблема с Вашим IP. Вы могли сбросить свой маршрутизатор и получить новый глобальный IP таким образом, Вы получите новый IP, который не используется, и Вы спам привычки. Если теперь нет чего-то не так с Вашим компьютером.

  • Проверка Ваша сеть, сколько клиентов соединено?
  • могло случиться так, что Ваша беспроводная связь не достаточно безопасна, измените пароль, измените имя и измените тип шифрования.
  • Вы знаете кто ownes клиенты в Вашей сети?

Не Вирус
это не вирус. вирус является программой, которая устанавливает на Вашем компьютере отдельно, действительно маловероятно, что это - вирус.

троянец?
, Но это мог быть троянец. программа А, что Вы установили и не то, что Вы думаете, что это.

это - официальная антивирусная страница ubuntu.com. я надеюсь, что Вы находите то, что Вы ищете там. Я все еще думаю, что новая установка является лучшим способом пойти.

86
задан Alex Angas 3 September 2009 в 08:47
поделиться

9 ответов

Ни один язык не идеален для всех задач, и Objective-C не исключение, но есть некоторые очень специфические тонкости. Как и при использовании LINQ и var (для которых я не знаю прямой замены), некоторые из них строго связаны с языком, а другие - с инфраструктурой.

( ПРИМЕЧАНИЕ: Так же, как C # тесно связан с .NET, Objective-C тесно связан с Cocoa. Следовательно, некоторые из моих соображений могут показаться не связанными с Objective-C, но Objective-C без Cocoa похож на в C # без .NET / WPF / LINQ, работающий под Mono и т. д. Это просто не так, как обычно.)

Я выиграл ' Я пытаюсь полностью раскрыть различия, плюсы и минусы, но вот некоторые из них приходят в голову.

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

  • Как строгий надмножество C, Objective-C полагается, что вы знаете, что делаете. В отличие от управляемого и / или типизированного подхода таких языков, как C # и Java, Objective-C позволяет вам делать то, что вы хотите, и испытывать последствия. Очевидно, что временами это может быть опасно, но тот факт, что язык активно не мешает вам делать большинство вещей, довольно мощный. ( РЕДАКТИРОВАТЬ: Я должен пояснить, что C # также имеет "небезопасный" функции и функциональные возможности, но по умолчанию их поведение - это управляемый код, от которого вы должны явно отказаться. Для сравнения, Java только допускает типизированный код и никогда не предоставляет исходные указатели так, как это делают C и другие.)

  • Категории (добавление / изменение методов в классе без создания подклассов или доступа к исходному тексту) ) - потрясающий обоюдоострый меч. Это может значительно упростить иерархию наследования и исключить код, но если вы сделаете что-то странное, результаты иногда могут быть сбивающими с толку.

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

  • Привязки какао и наблюдение значения ключа могут устранить тонны связующего кода, и структуры Какао широко используют это. Динамическая диспетчеризация Objective-C работает рука об руку с этим, поэтому тип объекта не имеет значения, если он соответствует ключу-значению.

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

  • Для параллелизма блоки (новая языковая функция в Snow Leopard, реализованная во множестве API-интерфейсов Cocoa) чрезвычайно полезны. Несколько строк (часто вместе с Grand Central Dispatch, который является частью libsystem в 10.6) может устранить значительный шаблон функций обратного вызова, контекста и т. д. (блоки также могут использоваться в C и C ++ и, безусловно, могут быть добавлены в C #, что было бы здорово). NSOperationQueue также очень удобный способ добавить параллелизм к вашему собственному коду, отправив либо пользовательские подклассы NSOperation, либо анонимные блоки, которые GCD автоматически выполняет для вас в одном или нескольких различных потоках.

89
ответ дан 24 November 2019 в 07:58
поделиться

Технического обзора здесь нет, но я считаю Objective-C гораздо менее читабельным. На примере Cinder6:

C #

List<string> strings = new List<string>();
strings.Add("xyzzy");                  // takes only strings
strings.Add(15);                       // compiler error
string x = strings[0];                 // guaranteed to be a string
strings.RemoveAt(0);                   // or non-existant (yielding an exception)

Objective-C

NSMutableArray *strings = [NSMutableArray array];
[strings addObject:@"xyzzy"];
[strings addObject:@15];
NSString *x = strings[0];
[strings removeObjectAtIndex:0];

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

Я рад, что у нас есть Mono для Mac OS, потому что, если бы мне пришлось полагаться на Apple чтобы дать мне хорошую среду разработки ...

45
ответ дан 24 November 2019 в 07:58
поделиться

Возможно, наиболее важным отличием является управление памятью. С C # вы получаете сборку мусора, так как это язык на основе CLR. С Objective-C вам нужно управлять памятью самостоятельно.

Если вы работаете с C # (или с любого другого современного языка в этом отношении), переход на язык без автоматического управления памятью будет очень болезненным, поскольку вы потратите у вас много времени на кодирование на правильное управление памятью (а также на отладку).

3
ответ дан 24 November 2019 в 07:58
поделиться

Одна вещь, которая мне нравится в объекте Objective-C, - это то, что объектная система основана на сообщениях, она позволяет вам делать действительно приятные вещи, которые вы не могли сделать в C # (по крайней мере, пока они не поддерживают ключевое слово dynamic!).

Еще одна замечательная вещь в написании приложений какао - это Interface Builder, он намного лучше, чем конструктор форм в Visual Studio.

В obj-c меня (как разработчика C #) раздражает то, что вам нужно управлять собственной памятью (есть сборка мусора, но это не так. работают на iPhone) и что он может быть очень подробным из-за синтаксиса селектора и всех [].

5
ответ дан 24 November 2019 в 07:58
поделиться

Кроме разницы парадигм между двумя языками, большой разницы нет. Как бы мне не хотелось это говорить, вы можете делать те же вещи (вероятно, не так легко) с .NET и C #, как с Objective-C и Cocoa. Что касается Leopard, Objective-C 2.0 имеет сборку мусора, поэтому у вас нет для самостоятельного управления памятью, если вы этого не хотите (совместимость кода со старыми приложениями Mac и iPhone - это две причины, по которым вы можете захотеть).

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

Я буду первым, кто признает, что я ' m не очень хорошо знаком с C # или .NET. Но перечисленные выше причины, по которым Куинн, - это довольно много причин, по которым я не хочу им становиться.

-2
ответ дан 24 November 2019 в 07:58
поделиться

Вот довольно хорошая статья, в которой сравниваются два языка: http://www.coderetard.com/2008/03/16/c-vs-objective-c/

1
ответ дан 24 November 2019 в 07:58
поделиться

Вызов методов, используемых в obj-c make для легкого чтения кода, на мой взгляд намного элегантнее, чем c #, и obj-c построен поверх c, поэтому весь код c должен нормально работать в obj-c. Но больше всего мне нравится то, что obj-c является открытым стандартом, поэтому вы можете найти компиляторы для любой системы.

-3
ответ дан 24 November 2019 в 07:58
поделиться

Ручное управление памятью - это то, с чем новички в Objective-C, похоже, больше всего сталкиваются, в основном потому, что они думают, что это более сложно, чем есть на самом деле.

Objective-C и Какао по расширению полагаются о конвенциях по обеспечению соблюдения; знайте и следуйте очень небольшому набору правил, и вы получите много бесплатного взамен за счет динамической среды выполнения.

] alloc должен соответствовать выпуску в конце текущей области.

  • Если возвращаемое значение для вашего метода было получено с помощью alloc , тогда оно должно быть возвращается return [value autorelease]; вместо сопоставления с выпуском .
  • Используйте свойства, и нет правила 3.
  • Далее следует более подробное объяснение.

    Управление памятью основано на владении; только владелец экземпляра объекта должен когда-либо освобождать объект, все остальные всегда должны ничего не делать. Это означает, что в 95% всего кода вы относитесь к Objective-C как к сборщику мусора.

    А что насчет остальных 5%? У вас есть три метода, на которые нужно обратить внимание: любой экземпляр объекта, полученный из этого метода, принадлежит текущей области метода :

    • alloc
    • Любой метод, начинающийся со слова new , например new или newService .
    • Любой метод, содержащий слово copy, например copy и mutableCopy .

    У метода есть три возможных варианта того, что делать с экземплярами принадлежащих ему объектов перед выходом:

    • Освободите его, используя выпуск , если он больше не нужен.
    • Передайте право собственности на поле a (переменная экземпляра) или глобальную переменную, просто назначив ее.
    • Отказаться от владения, но дать кому-то другому возможность стать владельцем до того, как экземпляр исчезнет, ​​вызвав autorelease .

    Итак, когда вам следует активно переходить на владение, позвонив сохранить ? Два случая:

    • При назначении полей в ваших инициализаторах.
    • При ручном внедрении метода установки.
    17
    ответ дан 24 November 2019 в 07:58
    поделиться

    Как программист, только начинающий работать с Objective-C для iPhone, начиная с C # 4.0, Мне не хватает лямбда-выражений и, в частности, Linq-to-XML. Лямбда-выражения специфичны для C #, в то время как Linq-to-XML на самом деле больше контрастирует между .NET и Cocoa. В примере приложения, которое я писал, у меня был XML в строке. Я хотел разобрать элементы этого XML на коллекцию объектов.

    Чтобы добиться этого в Objective-C / Cocoa, мне пришлось использовать класс NSXmlParser . Этот класс опирается на другой объект, который реализует протокол NSXMLParserDelegate с методами, которые вызываются (чтение: отправленные сообщения) при чтении открытого тега элемента, при чтении некоторых данных (обычно внутри элемента) и при читается конечный тег какого-то элемента. Вы должны отслеживать статус и состояние синтаксического анализа. И я, честно говоря, понятия не имею, что произойдет, если XML недействителен. Он отлично подходит для того, чтобы углубиться в детали и оптимизировать производительность, но, черт возьми, это очень много кода.

    Для сравнения, вот код на C #:

    using System.Linq.Xml;
    XDocument doc = XDocument.Load(xmlString);
    IEnumerable<MyCustomObject> objects = doc.Descendants().Select(
             d => new MyCustomObject{ Name = d.Value});
    

    И все, у вас есть коллекция настраиваемых объектов, взятых из XML. Если вы хотите отфильтровать эти элементы по значению или только те, которые содержат определенный атрибут, или если вам просто нужны первые 5, или пропустить первый 1 и получить следующие 3, или просто узнать, были ли возвращены какие-либо элементы ... БАМ, все в той же строчке кода.

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

    * ПРИМЕЧАНИЕ. На самом деле я не компилировал приведенный выше код, он просто предназначен для примера, чтобы проиллюстрировать относительную недостаточную многословность, требуемую C #.

    4
    ответ дан 24 November 2019 в 07:58
    поделиться
    Другие вопросы по тегам:

    Похожие вопросы: