Objective-C [за что платим]
Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті
Занимаюсь подготовкой продукта для выхода в AppStore.
По ходу работаю над виртуализацией части кода ответсвенной за проверку рецептов, на том же движке что и сейчас используется в текущем продукте т.е. это самостоятельно разработанная виртуальная машина, язык программирования и компилятор.
По ходу дела разбираюсь при помощи дизассемблера в том коде который генерирует ObjectiveC компилятор.
Может я не понимаю всей задумки «think different», но то что он генерирует немного пугает, на что тратятся вычислительные ресурсы.
Вот небольшой пример во что в конечном счёте превращается код написанный на ObjectiveC
Исходный код:
NSData *nameData = [NSData dataWithBytesNoCopy:attributes[0].data length:attributes[0].length freeWhenDone:NO]; NSString *name = [[NSString alloc] initWithData:nameData encoding:NSUTF8StringEncoding];
Что сгенерировал компилятор (поправил до компилируемого состояния):
long pool_NSData = objc_getClass("NSData"); NSData *nameData = (NSData*)objc_msgSend(pool_NSData, sel_registerName("dataWithBytesNoCopy:length:freeWhenDone:"), attributes[0].data, attributes[0].length, (BOOL)0); long pool_NSString = objc_getClass("NSString"); long v0 = objc_msgSend(pool_NSString, sel_registerName("alloc")); NSString *name = (NSString*)objc_msgSend(v0, sel_registerName("initWithData:encoding:"), nameData, NSUTF8StringEncoding);
Обратите внимание на обилие строк, их специальное форматирование и т.д.
Вы теперь представляете на что уходят ресурсы Вашего процессора?
11 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарів