2014-08-28 4 views
2

Будут ли какие-либо преимущества при использовании NSClassFromString? Особенно при сравнении со стандартным способом импорта класса из заголовка и инициализации.Производительность NSClassFromString

ответ

1

Совсем нет. Во всяком случае, NSClassFromString медленнее, чем обычный способ использования класса!

+0

Можете ли вы указать, что делает его более медленным, чем обычный способ использования класса? – Vivek

+0

@Vivek - просто сделайте бенчмарк;) Я просто знаю, что внутренности ob ObjC довольно хорошо, а 'NSClassFromString' должен быть медленнее, чем обычный, потому что он просто делает гораздо больше работы. Вы можете посмотреть на разборку, чтобы увидеть это. – Michael

+3

@Vivek, если вы обычно используете класс, имя разрешается при загрузке; когда вы используете 'NSClassFromString', класс разрешается во время выполнения. Furhtermore, разработчики ObjC были довольно умны: если 'NSClassFromString' были быстрее, тогда компилятор генерировал бы вызовы NSClassFromString' всякий раз, когда вы используете класс, вместо того, чтобы делать то, что он делает сейчас. – Michael

0

Я не вижу, как вы можете думать, что использование NSStringFromClass() является альтернативой импортированию объявления класса и разрешает компилятору выполнять эту работу.

Учитывая, что компилятор не увидит объявление, объект будет рядом с бесполезным, и вы будете вынуждены преобразовывать строки в селекторы, чтобы иметь возможность их вызывать.

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

+0

Я искал поисковик «как работает nsclassfromstring». Но не могу найти что-нибудь полезное :( – Vivek

+2

@Vivek Использование его вовсе не является альтернативой импортированию заголовка и позволяет компилятору выполнять работу. Они похожи на мел и сыр. – trojanfoe

0

NSClassFromString - это команда времени выполнения, которая означает, что во время выполнения будет выполнена выборка в «базе данных», чтобы найти загруженный класс, соответствующий данному имени. Во-первых, не рекомендуется использовать его, когда вы можете использовать шаблон шаблона #import (который будет выполнять выборку во время компиляции, чтобы конечный пользователь этого не заметил). это обеспечит меньшую безопасность кода, что может привести к «очень трудным для отладки». Возможно, наступит время, когда оно вам понадобится, например, при создании класса во время выполнения или при попытке проанализировать json-объект или словари конкретному классу.

Смежные вопросы