Обсуждение:Objective-C

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску

Это что, копи-паст в тупую с http://steps3d.narod.ru/tutorials/objective-c-tutorial.html ?

Это собственно мой тек5ст, изначально мню и выложженный

похоже что да. вместе с ошибками 8)

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

Есть

class A
{
   void func(){}
};
..
void (A::*f)()=&A::func; //адрес функции
A a,b;
//Вызовы
a.*f();
b.*f();

Это не ошибка - укащзатель на метод это не указатель на функцию. В С++ Вы никогда не получите адрес метода именно как функцию (кроме хаков) Тем более, если функция виртуальная, то по стандарту оператор ->* должен вызвать приавльный метод, т.е. обратится к VMT. Фактически для MS VC в случае виртуклной функции указатель на метод, это offset в VMT А для objective-C я получаю именно функцию, и разрешение виртуальности просиходит именно в момент получения адреса функции.


Стоит заметить, что язык Objective-C активно применялся для построения пользовательского интерфейса и библиотеки классов для операционной системы NextStep, в то время, когда эта система работала на компьютерах с 25-Мгц процессорами Motorola 68030. Если даже на таком процессоре язык обеспечивал приемлимое быстродействие, то сейчас о нём можно практически не думать.

Очень спорно. Вместе с возможностями железа выросли и потребности программного обеспечения к ресурсам этого самого железа. plashchynski 17:35, 9 августа 2008 (UTC)[ответить]

Objective-C использует гибридную типизацию: C-типы - статическую, объекты - динамическую. В английской википедии у C и Objective-C указана нестрогая типизация, и это так. 212.44.130.15 19:31, 17 мая 2010 (UTC)[ответить]

Синхронизация[править код]

«При помощи директивы @synchronized () можно защитить фрагмент кода от одновременного выполнения сразу несколькими потоками.»
Здесь и далее по тексту раздела Objective C#Синхронизация упоминания о защищаемом фрагменте кода некорректны. Ведь в случае конкуренции любых участков кода, синхронизированных по одному и тому же объекту, они будут выполняться поочередно...
Короче, RTFM: [1]
Сейчас я на работе и у меня нет времени на правку, если у вас время есть - внесите соответствующие изменения. Не нужно обманывать народ :) werediver 09:43, 1 апреля 2011 (UTC)[ответить]

Добавьте ARC[править код]

В последних версиях LLVM от Apple появился автоматический подсчет ссылок (ARC), который позволяет забыть о memory management. Не нужно отправлять каждому объекту dealloc, release и retain, ARC при компиляции делает все за программиста. Это снижает порог вхождения в язык. 2.132.30.233 08:04, 30 ноября 2012 (UTC)[ответить]

История[править код]

Получившийся в результате язык Objective-C оказался крайне прост — его освоение у С-программиста займет всего несколько дней.

Экспрессивное, ничем не подтвержденное утверждение. Помимо необходимости освоения Объектно-ориентированного подхода (если C-программист до этого имел опыт только со структурным программированием), сложности также вызывает необычный синтаксис для C-подобных языков.

Он является именно расширением языка С — в язык С просто добавлены новые возможности для объектно-ориентированного программирования. При этом любая программа на С является программой и на Objective-C.

Нужно сформулировать по-другому, т.к. данный вариант:

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

- во-вторых вызывает вопрос (может и надуманный но все равно) - если он всего лишь расширение языка С с новыми возможностями, то сможет ли обычный компилятор C скомпилировать код написанный Objective C?

Предлагаю другой вариант:

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

95.79.49.192 17:08, 27 марта 2013 (UTC)[ответить]

Синтаксис языка: свойства[править код]

Укажите, что assign - атрибут по умолчанию.
weak - не аналог assign для ARC. weak-ссылки ОБНУЛЯЮТСЯ после освобождения памяти объекта и это важно.
unsafe_unretained аналог assign для ARC.
Далее, если говорить об атрибутах - как же nonatomic.
Вообще, стоит свериться внимательно с литературой(например с Кочаном)- в статье присутствуют неточности.

178.158.130.41 20:44, 21 апреля 2013 (UTC)soxjke[ответить]