Comments 13
lass_getInstanceMethod => class_getInstanceMethod
-1
> проследив иерархию классов, выяснить, какие подклассы наследуются из данного класса. Это дает вам возможность писать подклассы, которые будут отвечать за специфичиские форматы данных, или что-то в этом роде, и потом дать суперклассу возможность находить их самому, избавив себя от утомительной необходимости регистрировать их все руками.
Всегда надеялся, что линкер или оптимизирующий компилятор выбрасывают неиспользуемый код, и в исполняемый файл попадает код только используемых функций и классов, т.е. если импортировать какую-нибудь библиотеку с тысячей функций, и использовать только одну из них, то только эта одна функция и будет включена в итоговый исполняемый файл.
Но возможно, это экономия на спичках в наше время терабайтовых жёстких дисков и гигабайтов оперативной памяти.
Всегда надеялся, что линкер или оптимизирующий компилятор выбрасывают неиспользуемый код, и в исполняемый файл попадает код только используемых функций и классов, т.е. если импортировать какую-нибудь библиотеку с тысячей функций, и использовать только одну из них, то только эта одна функция и будет включена в итоговый исполняемый файл.
Но возможно, это экономия на спичках в наше время терабайтовых жёстких дисков и гигабайтов оперативной памяти.
0
Я уже не представляю как можно кодить без Runtime API, он действительно открывает огромнейшие возможности, так что если кто еще не начал его юзать — очень советую.
0
Прям классы на лету создаёте? Или больше интроспекцией занимаетесь?
0
Да всего по чуть-чуть, вот в этом проекте все построено на мощи Runtime.
Классы на лету только инстанциировал, но новый класс не добавлял.
Самый банальный пример удобного использования ObjC Runtime это замена switch'ей.
Допустим нам надо основываясь на каком-то выборе отображать конкретный контроллер, в случае без гибкого рантайма пришлось бы использовать switch, а в случае с ObjC можно делать все просто и красиво
и все, никаких свитчей, минимум кода.
А вообще там есть гораздо больше плюх и удобств.
Классы на лету только инстанциировал, но новый класс не добавлял.
Самый банальный пример удобного использования ObjC Runtime это замена switch'ей.
Допустим нам надо основываясь на каком-то выборе отображать конкретный контроллер, в случае без гибкого рантайма пришлось бы использовать switch, а в случае с ObjC можно делать все просто и красиво
const char * const controllers[] = {"Foo", "Bar", "Bazz"};
...
// index - индекс ячейки в таблице, или тэг на кнопке
NSString *controllerName = [NSString stringWithFormat:@"%sViewController", controllers[index]];
UIViewController *viewController = [NSClassFormString(controllerName) new];
и все, никаких свитчей, минимум кода.
А вообще там есть гораздо больше плюх и удобств.
+3
Да, красиво, особенно, если возможных вариантов больше десятка)
0
*конечно не православно, но всё же*
Методика очень удобная, постоянно использую, когда работаю над ActionScript проектами:
это когда список классов заранее известен. Так же есть прекрасные вещи в стиле:
честно признать, не знал, что в ObjC оно тоже есть, буду пользоваться:) Спасибо!
Методика очень удобная, постоянно использую, когда работаю над ActionScript проектами:
const classes : Vector.<Class> = new <Class>[ FooController, BarController, BazzController ];
var controller : IViewController = new ( classes[ index ] )( );
это когда список классов заранее известен. Так же есть прекрасные вещи в стиле:
function addParticle(particleClassName : String = "DefaultParticle") : void
{
addChild( new ( ApplicationDomain.currentDomain.getDefinition( particleClassName ) )() );
}
честно признать, не знал, что в ObjC оно тоже есть, буду пользоваться:) Спасибо!
0
Офигительное пятничное чтиво, серьёзно. Спасибо. :)
0
Sign up to leave a comment.
Objective-C Runtime изнутри