Войти
iPhoneФорумПрограммирование

Первые шаги[iPhone] (2 стр)

Страницы: 1 2
#15
9:41, 3 мар 2011

crsib
Спасибо

#16
17:32, 5 мар 2011

Да тему создал давно, а время только сейчас появилось чтобы отписаться :(
Не подскажите еще такую штуку с "С" вроде как все нормально, а вот попытался в свободное время описать класс ну скажем вида:

#ifndef __CFOO_H__
#define __CFOO_H__
class CFoo
{
public:
   CFoo(){}
   ~CFoo(){}
}; 
#endif /*__CFOO_H__*/

Но XCode как я понял не понял что ему подсунули и ругнулся error: expected '=', ',', ';', 'asm' or '__attribute__' before 'CFoo'... Как грится первый блин комам….

Может подскажите что XCode(у) не нравиться и как это дело все исправить?

#17
17:35, 5 мар 2011

Расширение у файла какое?

#18
17:42, 5 мар 2011

Пробовал и *.mm( для C++ ) и *.m (для C) и на крайняк *.cpp и одна и та же ерунда даже не знаю в чем косяк

#19
13:25, 7 мар 2011

crsib
> не считая imp кэширования, но оно ппц страшное и используется если уж совсем
> сильно приперло

разве последний найденный метод ( или несколько последних ) не автоматический кешируются ?

#20
13:49, 7 мар 2011

видимо, он у тебя ругается на неизвестный атрибут, который включился до 'CFoo'

#21
14:20, 7 мар 2011

innuendo
> разве последний найденный метод ( или несколько последних ) не автоматический
> кешируются ?
Apple, конечно, утверждает, что это так. Но на практике overhead на вызов все равно дикий. А вот когда приперает, то используется ручками какая-нибудь гадость типо method_getImplementation, результат выполнения которой позволяет снизить оверхед до вызова обычной С функций (reinterpret_cast'ом кастим к функции с нужной сигнатурой ("сигнатура" селектора + 2 доп параметра). Причем ровно эта же C функция будет вызвана откуда-то из недр objc_msgSend. И "кэширование" рантаймом лишь позволит снизить время, которое objc_msgSend затратит на попытку найти селектор у класса, его суперкласса, суперкласса суперкласса и так до самого NSObject)) И да, в данном случае это может серьезно ударить по производительности и да, я наблюдал такие "удары" (дабы сразу убрать твою строку про "атцов, которые негодуют").

#22
14:45, 7 мар 2011

crsib
> И "кэширование" рантаймом лишь позволит снизить время, которое objc_msgSend
> затратит на попытку найти селектор у класса, его суперкласса, суперкласса
> суперкласса и так до самого NSObject))

ну да, кешируется несколько последних найденных реализаций методов

> (дабы сразу убрать твою строку про "атцов, которые негодуют").

NEXTStep писали на ObjC - естественно time-critical на чистом С :)


а никак reflection не позволяет как-то ускорить через perform или типа того ?

#23
15:16, 7 мар 2011

innuendo
> ну да, кешируется несколько последних найденных реализаций методов
Считаем вызовы __imp_objc_msgSend (от него можно избавиться, но это не всегда просто) -> objc_msgSend -> (сheсking cache -> hit) -> вызов IMP метода -> PROFIT!!1.
innuendo
> а никак reflection не позволяет как-то ускорить через perform или типа того ?
Я тебе написал как. Есть ряд методов, позволяющих получить от рантайма IMP селектора. IMP - указатель на С функцию с сигнатурой return_val (NSObject* self, SEL selector, ....). Вместо .... надо подставить сигнатуру селектора. Тогда получается нечто более адекватное в плане call stack: вызов IMP метода -> PROFIT!!1. Но это нифига не удобно. Гораздо проще отказаться от Objective-C. При этом получить вподарок плюшку ввиде, например, inline'овых функций. Кстати рантайм языка настолько суров, что я у произвольного класса могу поменять реализацию произвольного селектора на свою.
innuendo
> NEXTStep писали на ObjC
[холивар_мод]
Я очень рад за NEXTStep, OpenStep, GNUStep и OSX. Имел честь общаться только с последним зверем. Единственный шанс комфортно работать с ситемой - 8+ гб памяти и отключение свопа. При этом есть риск, что система уйдет в kernel panic (микроядро, ага) если 8+ гб памяти таки кончатся. Зато исппользование свопа значительно повышает шанс, что система залочится. В данном случае это не вина ObjC. Но уже сам выбор ядра для системы и то, что его за 8 лет так и научили работать, уже намекает на то, что каг бе компания не всегда делает правильный выбор и никогда не готова признать того, что она сделала неправильный.
[/холивар_мод]

#24
15:33, 7 мар 2011

crsib
> Имел честь общаться только с последним зверем. Единственный шанс комфортно
> работать с ситемой - 8+ гб памяти и отключение свопа. При этом есть риск, что
> система уйдет в kernel panic (микроядро, ага) если 8+ гб памяти таки кончатся.
> Зато исппользование свопа значительно повышает шанс, что система залочится.

какая версия ?

#25
15:36, 7 мар 2011

innuendo
> какая версия ?
C 10.4.10 по 10.6.6. Выбирай любую. Вариации железа так же обширны.

#26
18:29, 7 мар 2011

crsib
> > какая версия ?
> C 10.4.10 по 10.6.6. Выбирай любую. Вариации железа так же обширны.

ну не знаю - знакомый артовик на маке работает, не жаловался :)

#27
17:06, 12 мар 2011

Сори что опять так поздно отписываюсь, но время появляется только на выходных.
Проблема из поста #0 решается следующим образом:

Выбираем файлы с расширением *.m, *.mm, *.c, *.cpp так сказать те в которых юзается С++ декларация, далее заходим в свойства файла и в File Type: выбираем sourcecode.cpp.objcpp вместо sourcecode.c.objc и все компилируется без проблем т.к. уже используется g++ вместо gcc

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

#28
20:10, 12 мар 2011

crsib
> Сode sense работает только в зависимости от фазы луны, средства для
> рефакторинга минамальные, только для obj-c, и не всегда работают. Разобраться в
> адекватном конфиге проекта в 3-ем можно только крепко накурившись, некоторые
> решения в дизайне принимались явно под тем самым крепким накуром. 4-ка чуть
> получше, но пока preview и умеет по прежнему мало и плохо. Отдельную
> благодарности соит выразить instruments, которые в ряде случаев жрут столько
> памяти, что iOS убивает анализируемое приложение.

какой иос и инструмаенты? дебажить чтоле на айфоне? про эмуляторы слышал?
а с чего ты взял что простой программистдолжен колупаца в настройках проекта? ты говоришь что там не разобраться, а отец тебе скажет что они настройки всеобъемлющи=)
и где тебе интелисенс не работает? да не сишарп канеш но у меня нареканий нет.  хотя правка: нарекание есть. не видно типа возвращаемого значения у метода :)

странные твои слова и мне нифига не понятны. точка.

а с селекторами- можно просто метод по имени получать кстате. прям рефлексия

#29
20:21, 12 мар 2011

ALTAIR
> и где тебе интелисенс не работает
В 4-ом он вроде заработал. Но я пока мало общался с релизом 4-ки, так что не могу утверждать. В 3-м XCode он, во первых, не учитывает контекста, во вторых забивает вообще на почти все методы.

ALTAIR
> про эмуляторы слышал?
Я да, Apple нет.

ALTAIR
> какой иос и инструмаенты?
Ой, а ты не профайлишь код? BTW, instruments в симуляторе, по очевидным причинам, не работает. Хотя бы потому что x86 это не Arm.

ALTAIR
> а с чего ты взял что простой программистдолжен колупаца в настройках проекта?
> ты говоришь что там не разобраться, а отец тебе скажет что они настройки
> всеобъемлющи=)
Толсто, очень толсто. Жирнота зашкаливает...

ALTAIR
> а с селекторами- можно просто метод по имени получать кстате. прям рефлексия
А еще можно менять реализацию любого метода, и что?

Я чето не осознал, это был толстый тролинг или просто с пятницы алтаира еще плющит...

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

Страницы: 1 2
iPhoneФорумПрограммирование

Тема в архиве.