Форум программистов, компьютерный форум CyberForum.ru

Отличия С++ от objC - Objective-C

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Objective-C Хранение объектов в массиве http://www.cyberforum.ru/objective-c/thread1255336.html
Добрый вечер! Стоит задача: создать матрицу с задаваемыми размерами строки и столбца и провести над ней операцию. При выполнении задания возникли 2 непреодолимые задачи. Гугл перерыл (включая на инглише), маны читал, ничего не помогает. Первый: можно ли создать массив из NSTextField'ов? По сути, тут надо объявить NSMutableArray из этих TextField'ов, но есть ли такая возможность? И как это должно...
Objective-C Неизвестный объект занимает всю область ячейки UITableViewCell Есть класс наследованный от UITableViewController в методе tableView:cellForRowAtIndexPath я получаю ячейку: cell = ;потом создаю картинку (UIImageView) и текст (UILabel) и вставляю их в ячейку с помощью addSubview но мои картинку и текст закрывает неизвестный белый объект, растянутый на всю ячейку, свои элементы я вижу только потому что они не помещаются в ячейке и выглядываю снизу что... http://www.cyberforum.ru/objective-c/thread1254823.html
Обработка пуша Objective-C
Всм доброго времени суток, вот возникла проблемма, не могу найти рабочее решение, картина такая, мне сервер присылает пуш с определенным типом, я проверяю тип пуша и по нему через локальную нотификацию выполняю какое либо действие, все работает только в состоянии активного приложения, если приложение свернуто либо выключено действия не происходит, если свернуто и приходит пуш по нажатию на пуш...
Xcode error thread 1 signal sigabrt (прокручиваемый список) Objective-C
Ребят только начинаю программировать, делаю все по примеру в книге, но каждый ра какие то проблемы, которые там не описаны, как будто все сразу должно получиться. В моем случае программа каждый раз экстренно прерывается, с чем может быть это связано?
Objective-C Работа с сокетом и сворачивание приложения http://www.cyberforum.ru/objective-c/thread1251761.html
В обработчике события таймера я периодически отправляю некие данные в строке string броадкастом примерно вот так: NSString * address = @"255.255.255.255"; UInt16 port = 888888; NSData * data = ; ; Все отлично, пока я не сворачиваю свое приложение, нажав кнопку домой. После запуска приложения событие таймера обрабатываются, но вот данные уже не отправляются. Приходится...
Objective-C Запретить блокировку экрана в момент работы приложения Здравствуйте! При работе моего приложения в основном используется акселерометр, на экран почти нет касаний. Как программно запретить IOS лочить (блокировать) экран при запущенном приложении? Добавлено через 10 минут Простите, вроде бы нашел сам: .idleTimerDisabled = NO; .idleTimerDisabled = YES; подробнее

Показать сообщение отдельно
noname_club
102 / 90 / 9
Регистрация: 01.05.2013
Сообщений: 583
14.09.2014, 19:45     Отличия С++ от objC
C++ allows multiple inheritance, Objective-C doesn't.
Unlike C++, Objective-C allows method parameters to be named and the method signature includes only the names and types of the parameters and return type (see bbum's and Chuck's comments below). In comparison, a C++ member function signature contains the function name as well as just the types of the parameters/return (without their names).
C++ uses bool, true and false, Objective-C uses BOOL, YES and NO.
C++ uses void* and NULL, Objective-C prefers id and nil.
Objective-C uses "selectors" (which have type SEL) as an approximate equivalent to function pointers.
Objective-C uses a messaging paradigm (a la Smalltalk) where you can send "messages" to objects through methods/selectors.
Objective-C will happily let you send a message to nil, unlike C++ which will crash if you try to call a member function of NULL
Objective-C allows for dynamic dispatch, allowing the class responding to a message to be determined at runtime, unlike C++ where the object a method is invoked upon must be known at compile time (see wilhelmtell's comment below). This is related to the previous point.
Objective-C allows autogeneration of accessors for member variables using "properties".
Objective-C allows assigning to self, and allows class initialisers (similar to constructors) to return a completely different class if desired. Contrast to C++, where if you create a new instance of a class (either implicitly on the stack, or explicitly through new) it is guaranteed to be of the type you originally specified.
Similarly, in Objective-C other classes may also dynamically alter a target class at runtime to intercept method calls.
Objective-C lacks the namespace feature of C++.
Objective-C lacks an equivalent to C++ references.
Objective-C lacks templates, preferring (for example) to instead allow weak typing in containers.
Objective-C doesn't allow implicit method overloading, but C++ does. That is, in C++ int foo (void) and int foo (int) define an implicit overload of the method foo, but to achieve the same in Objective-C requires the explicit overloads - (int) foo and - (int) fooint) intParam. This is due to Objective-C's named parameters being functionally equivalent to C++'s name mangling.
Objective-C will happily allow a method and a variable to share the same name, unlike C++ which will typically have fits. I imagine this is something to do with Objective-C using selectors instead of function pointers, and thus method names not actually having a "value".
Objective-C doesn't allow objects to be created on the stack - all objects must be allocated from the heap (either explicitly with an alloc message, or implicitly in an appropriate factory method).
Like C++, Objective-C has both structs and classes. However, where in C++ they are treated as almost exactly the same, in Objective-C they are treated wildly differently - you can create structs on the stack, for instance.
по порядку.

1) C++ allows multiple inheritance, Objective-C doesn't.
Множественное наследование достаточно спорный паттерн.
В Objective-C есть интерфейсы (протоколы @protocol).

2) Unlike C++, Objective-C allows method parameters to be named and the method signature includes only the names and types of the parameters and return type (see bbum's and Chuck's comments below). In comparison, a C++ member function signature contains the function name as well as just the types of the parameters/return (without their names).
ну тут в 2 словах если. То речь идет как раз про избыточный синтаксис Objc. В том плане что параметры методов имеют названия, кроме непосредственно имени переменной параметра.

Objective-C
1
[self.helloMethod: param1 withParam2: param2 AndParam3: param3]
3) C++ uses bool, true and false, Objective-C uses BOOL, YES and NO.
C++ uses void* and NULL, Objective-C prefers id and nil.
ну это просто как будет удобно. И то и другое верно.

4) Objective-C uses "selectors" (which have type SEL) as an approximate equivalent to function pointers.
Objective-C uses a messaging paradigm (a la Smalltalk) where you can send "messages" to objects through methods/selectors.
Objc можно совершенно внезапно проверить и вызвать любой метод у объекта. Даже из private секции.

Objective-C
1
2
3
4
5
if ([self respondsToSelector: @selector(helloMethod:)]) {
    // метод helloMethod есть у объекта self
    // вызываем селектор
    [self peformSelector: @selector(helloMethod:) withObject: @"value"];
}
Хотя данная конструкция применятся в качестве вызова метода при паттерне "делегирование", но ничто не мешать вызвать методы которые не видны.

5) Objective-C will happily let you send a message to nil, unlike C++ which will crash if you try to call a member function of NULL
При вызове методов у NIL указателей ошибки не будет. То есть если указатель пуст, то "случаный" вызов у него методов того или иного класса критических ошибок не вызывает.

Однако при работе с массивами и словарями, хранение в них nil недопустимо и вызывает исключение. Вместо этого надо использовать [NSNull null]

6) Objective-C allows for dynamic dispatch, allowing the class responding to a message to be determined at runtime, unlike C++ where the object a method is invoked upon must be known at compile time (see wilhelmtell's comment below). This is related to the previous point.
Objc имеет мощные инструменты для распаралеривания.
Сюда можно отнести класс dispatch* функций, для создания и сихронизации потоков.
И также очереди задач в лице NSOperationQueue
И Также легкое создание блоковых ^{ } конструкций. Внутри других функций.

7) Objective-C allows autogeneration of accessors for member variables using "properties".
Не так давно (ориентировочно IOS5) Objective-C позволяет не использовать вообще слово @synthesize, которое раньше использовалось для объявления свойств у объектов. Теперь достаточно написать 1 слово @property остальное компилятор сделает сам.

8) Objective-C allows assigning to self, and allows class initialisers (similar to constructors) to return a completely different class if desired. Contrast to C++, where if you create a new instance of a class (either implicitly on the stack, or explicitly through new) it is guaranteed to be of the type you originally specified.
Objc контрукторы классов всегла возвращают тот класс который создается. В отличие от C++ где есть хаки для создания конструктора который не будет возвращать верный класс.

9)Objective-C lacks the namespace feature of C++.
Objective-C lacks an equivalent to C++ references.
Objective-C lacks templates, preferring (for example) to instead allow weak typing in containers.
В Objective-C нет:
- шаблонов
- пространств имен (namespace)
- типов данных присущих C++

10)Objective-C doesn't allow implicit method overloading, but C++ does. That is, in C++ int foo (void) and int foo (int) define an implicit overload of the method foo, but to achieve the same in Objective-C requires the explicit overloads - (int) foo and - (int) fooint) intParam. This is due to Objective-C's named parameters being functionally equivalent to C++'s name mangling.
В Objc нет перегрузки функций по возращаемому типу данных.
На мой взгляд это преимущество. Которое не дает делать местами небезопасный код.

11)Objective-C will happily allow a method and a variable to share the same name, unlike C++ which will typically have fits. I imagine this is something to do with Objective-C using selectors instead of function pointers, and thus method names not actually having a "value".
ХЗ автор считает что указатели на функции лучше чем селекторы.
12)
Objective-C doesn't allow objects to be created on the stack - all objects must be allocated from the heap (either explicitly with an alloc message, or implicitly in an appropriate factory method).
Objective-C не позволяет создавать объекты в стеке - все объекты должны быть выделены из кучи (явно с сообщением Alloc или неявно в соответствующем заводским способом).

Вообщем. Тут используется ARC и именно этим обусловлено то что неявно нельзя не создать объект. Память должна быть выделена через alloc init (new).

13) Like C++, Objective-C has both structs and classes. However, where in C++ they are treated as almost exactly the same, in Objective-C they are treated wildly differently - you can create structs on the stack, for instance.
Objc поддерживает работу со структурами. struct Однако если внутрь структуры положить NSObject то могут возникнуть некоторые нюансы.

Добавлено через 7 минут
Он не понимает что такое "сборщик мусора". И не отличает ARC от него.
Слово "сборщик мусора" взято в кавычки чтобы лучше донести мысль. Так как словосочетание "счетчик ссылок" нужных ассоциаций вызывать не будет.
А принцип работы да, не спорю, разный.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru