LINUX.ORG.RU

С чего начать изучение Objective-C

 


0

2

Сабж.

Тему «Посоветуйте книги по X, с чего начать изучать Y» читал, в Wiki ответов не нашел. Умею С/С++, с ООП знаком. В Obj-C ни в зуб ногой, не умею даже hello_world, вообще новый для меня язык. С чего начать изучение?

Спасибо.



Последнее исправление: Dennis7 (всего исправлений: 1)

Книгу прочитать надо

fornlr ★★★★★
()
Ответ на: комментарий от anonymous

Вот этого более чем достаточно

Плюсую. Если знаешь C, вполне достаточно статьи в википедии и эппловских мануалов.

И таки да, hello_world на C является корректным hello_world на Obj-C, так что писать на нем ты уже умеешь.

Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)
Ответ на: комментарий от Legioner

А смысл? Есть же Swift. Лучше его учи.

пока только для iOS, не?

Objective C можно считать устаревшим.

для программ где много C/C++ кода, swift менее удобен чем objc[++]. придется много objc оберток писать, если я ничего не путаю.

waker ★★★★★
()
Ответ на: комментарий от Legioner

Про Swift я узнал из поста повыше, думаю, что пока оно мне не надо. Есть код на Obj-C, надо уметь в нем разбираться.

Хорошо бы еще если б vim+ctags+cscope умели хорошо работать с исходниками, но это я где уже видел, погуглю.

На Mac денег нет (нищеброд)

Dennis7
() автор топика
Последнее исправление: Dennis7 (всего исправлений: 1)

С чего начать изучение?

с установки xcode и чтения яббловских доков. если не хватит - ищи книжку.

waker ★★★★★
()
Ответ на: комментарий от Dennis7

Хорошо бы еще если б vim+ctags+cscope умели хорошо работать с исходниками, но это я где уже видел, погуглю.

в программах на objc активно используется связка кода с гуем стрелочками посредством использования манипулятора мышь (иногда с зажатым ctrl). эта порочная связь хранится в xml файлах, и типично с ней работают через interface builder. сомневаюсь что vim тебя спасет.

waker ★★★★★
()
Последнее исправление: waker (всего исправлений: 1)
Ответ на: комментарий от Dennis7

я тут вчера шел по улице, и видел дохлого голубя.

waker ★★★★★
()

Проблема не в том что бы найти под него нормальный мануал, а в том что бы найти под него нормальную IDE под Linux.

splinter ★★★★★
()
Ответ на: комментарий от splinter

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

waker ★★★★★
()
Ответ на: комментарий от waker

пока только для iOS, не?

Нет. Полная замена. Единственное, где он не работает - старые версии (iOS 6-, OS X 10.8- вроде), но и это могут исправить (они просто формат бинарника чуток поменяли.

для программ где много C/C++ кода, swift менее удобен чем objc[++]. придется много objc оберток писать, если я ничего не путаю.

Путаешь. У Swift-а прозрачный интероп с Objective C, включая C. Насчёт С++ не знаю. Использовать C-апи, конечно, не так удобно, как из Objective C, но проблем нет.

Legioner ★★★★★
()
Ответ на: комментарий от Dennis7

Про Swift я узнал из поста повыше, думаю, что пока оно мне не надо. Есть код на Obj-C, надо уметь в нем разбираться.

Понятно.

На Mac денег нет (нищеброд)

Поставь в виртуалке, работать сможешь. Кроме XCode нормальных средств работы с Objective C ты не найдёшь (есть ещё платный AppCode от JetBrains, по-моему он только под мак). Кроме мака ты ничем iOS/OS X проект не соберёшь. Даже не пытайся, никто так не делает.

Если речь не про iOS/OS X, а просто кто-то решил на Objective C написать что-то, тогда другое дело. Но такого в природе по-моему не бывает.

Legioner ★★★★★
()
Последнее исправление: Legioner (всего исправлений: 1)

Cox, Brad J. (1991). Object Oriented Programming: An Evolutionary Approach от автора Objective-C

ну и Xcode и практика.

qulinxao ★★☆
()
Ответ на: комментарий от Legioner

Нет.

What's New in Version 6.0.1

......

* NOTE: Swift support for OS X is coming in a future Xcode update

кто-то из нас не обладает полной информацией.

У Swift-а прозрачный интероп с Objective C, включая C.

откуда ты это «включая C» придумал? покажешь как из свифта вызвать сишную функцию без objc-обертки?

waker ★★★★★
()
Ответ на: комментарий от mono

Я собирал. :)

как? действительно интересно, т.к. хотелось бы компилять проект под мак из линукса, на билд-сервере.

waker ★★★★★
()
Ответ на: комментарий от Legioner

Если речь не про iOS/OS X, а просто кто-то решил на Objective C написать что-то, тогда другое дело. Но такого в природе по-моему не бывает.

ну почему не бывает, есть же gnustep. другой вопрос - кому и зачем это надо.

waker ★★★★★
()
Ответ на: комментарий от waker

Я немного лукавлю.

Это было очень давно (во времена iPhoneOS 3.0) и в экспериментальных целях. Для каких-либо реальных нужд это было непригодно. Там и проекта никакого не было, набор файлов с исходным кодом, которые собирал кросс-компилятор. А так как подписывать приложение под линуксом нечем, то для запуска на устройстве нужен был джейбрейк.

Возомжно, когда-нибудь darling сможет запускать консольные инструменты XCode, и можно будет использовать билд-сервер на линуксе для сборки проектов для Apple. Некоторые простые консольные приложения он уже запускает.

mono ★★★★★
()
Ответ на: комментарий от mono

Хеллоуворды? Ну это можно, да. Даже в галерее был такой.

Solace ★★
()
Ответ на: комментарий от Legioner

У Swift-а прозрачный интероп с Objective C, включая C. Насчёт С++ не знаю. Использовать C-апи, конечно, не так удобно, как из Objective C, но проблем нет.

Учитывая, что swift делали наркоманы с большой буквы, да еще есть и куча кода на objC (тот же cocos/etc), то знать objC нужно.

Solace ★★
()
Ответ на: комментарий от waker

ясно (если что — мне не надо под ios, мне только под osx, хотя врядли это что-то меняет).

готов к экспериментам? ;)

llvm + clang + lld к твоим услугам. sysroot из рабочего мака вырвешь. ПриветМиры у меня конпелялись

Stil ★★★★★
()
Ответ на: комментарий от Stil

не думаю что такое получится вменяемо настроить на сервисах типа drone.io. а локально я могу и на маке компилять.

waker ★★★★★
()

Кочана прочти.

EXL ★★★★★
()
Ответ на: комментарий от Stil

и не совсем понятно, как мне поможет sysroot с мака на линухе, и нахер он вообще нужен для компиляции.

waker ★★★★★
()
Ответ на: комментарий от Stil

да, про линковку забыл, действительно.

waker ★★★★★
()
Ответ на: комментарий от Stil

стоп.. разве на маке либы для линковки не из sdk берутся? чисто логически, если я на osx 10.9 собираю проект с osx10.6 sdk - проект ведь линкуется с чем-то из этого sdk, а не с системными, так?

проверил, таки да, отсюда они берутся:

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.6.sdk/usr/lib/libobjc.dylib

а вовсе не из /usr/lib

waker ★★★★★
()
Последнее исправление: waker (всего исправлений: 2)
Ответ на: комментарий от waker

Ок, значит сдк. Я Mach-O target собирал только на уровне «потыкать палочкой», когда раскуривал lld. И то это год назад было, но полученные бинари под макосью запускались, так что сейчас должно быть лучше/легче

Stil ★★★★★
()
Ответ на: комментарий от waker

кто-то из нас не обладает полной информацией.

Я уже несколько месяцев пишу хелловорлды и они прекрасно работают в OS X 10.9.

Возможно в XCode, который для всех, отключен Swift для OS X, а у меня бета-версия XCode, которая доступна только с подпиской, хотя странно, если так.

откуда ты это «включая C» придумал?

Не придумал, а прочитал и проверил.

покажешь как из свифта вызвать сишную функцию без objc-обертки?

1. Настраиваешь в проекте т.н. Bridging Header. Это .h заголовочный файл, он один в проекте. Туда включаешь все .h файлы, которые тебе нужны.

2. Профит. Все импортированные функции и типы доступны в Swift-е.

Вот пример:

#include <CommonCrypto/CommonDigest.h>
CC_SHA512_CTX *ctx = malloc(sizeof(CC_SHA512_CTX));
CC_SHA512_Init(ctx);
CC_SHA512_Update(ctx, "test", 4);
unsigned char md[CC_SHA512_DIGEST_LENGTH];
CC_SHA512_Final(md, ctx);
free(ctx);

  let ctx = UnsafeMutablePointer<CC_SHA512_CTX>.alloc(1)
  CC_SHA512_Init(ctx)
  let dataStr = "test"
  let data = dataStr.dataUsingEncoding(NSASCIIStringEncoding, allowLossyConversion: false)!
  CC_SHA512_Update(ctx, data.bytes, 4)
  let md = NSMutableData(length: Int(CC_SHA512_DIGEST_LENGTH))!
  CC_SHA512_Final(UnsafeMutablePointer<UInt8>(md.mutableBytes), ctx);
  ctx.dealloc(1)
Legioner ★★★★★
()
Ответ на: комментарий от Legioner

бета-версия XCode

это ^^

Настраиваешь в проекте т.н. Bridging Header. Это .h заголовочный файл, он один в проекте. Туда включаешь все .h файлы, которые тебе нужны.

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

(ты не подумай, мне нравится swift, но таки код взаимодействующий с C мне удобнее писать на ObjC)

waker ★★★★★
()
Последнее исправление: waker (всего исправлений: 1)
Ответ на: комментарий от waker

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

Почему?

(ты не подумай, мне нравится swift, но таки код взаимодействующий с C мне удобнее писать на ObjC)

Ну очевидно потому, что ObjC это надмножество C, естественно будет удобней. Но по факту можно и на Swift писать и в целом выглядит вполне нормально, имхо.

Legioner ★★★★★
()
Последнее исправление: Legioner (всего исправлений: 1)
Ответ на: комментарий от Legioner

Почему?

потому что получился говнокод.

Но по факту можно и на Swift писать и в целом выглядит вполне нормально, имхо.

это не нормально.

waker ★★★★★
()
Ответ на: комментарий от Legioner
CC_SHA512_Update(ctx, "test", 4);

vs

let dataStr = "test"
CC_SHA512_Update(ctx, dataStr.dataUsingEncoding(NSASCIIStringEncoding, allowLossyConversion: false).bytes, 4)

и тебе еще нужны агрументы?

waker ★★★★★
()
Ответ на: комментарий от waker

А какие тут аргументы? Интероп между swift и C тут в одном слове: ".bytes". И всё работает. Или тебе не нравится API Swift-а по работе со строками и массивами байтов? Это тоже можно обсудить, но к простоте вызова C-функций это вроде никоим образом не относится. Можешь считать, что там написано

CC_SHA512_Update(ctx, data, data_length);

vs

CC_SHA512_Update(ctx, data.bytes, data.length);

и в реальном коде так и будет. Говнокода я не вижу.

Legioner ★★★★★
()
Последнее исправление: Legioner (всего исправлений: 2)
Ответ на: комментарий от Legioner

Говнокода я не вижу.

ну так _тебе_ я и не запрещаю использовать swift.

waker ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.