Это зависит от того, что Вы делаете с изображением. imageNamed:
метод действительно кэширует изображение, но во многих случаях это собирается помочь с использованием памяти. Например, при загрузке изображения 10 раз для отображения наряду с некоторым текстом в табличном представлении, UIImage только сохранит единственное представление того изображения в памяти вместо того, чтобы выделить 10 отдельных объектов. С другой стороны, если у Вас есть очень большое изображение, и Вы не снова используете его, Вы могли бы хотеть загрузить изображение из объекта данных удостовериться, что оно удалено из памяти, когда Вы сделаны.
, Если бы у Вас нет огромных изображений, я не волновался бы об этом. Если Вы не видите проблемы (и престижность за проверку Объектного Выделения вместо того, чтобы заблаговременно оптимизировать), я предпочел бы меньше строк кода незначительным улучшениям памяти.
Класс Derived не будет экспортирован вашей DLL. Классы не наследуют экспорт. Добавьте к этому DLLAPI.
Также обратите внимание, что члены класса по умолчанию имеют частный доступ, поэтому ни один из ваших методов не должен быть доступен. Однако я вижу, что в моем тесте экспортируется Base :: B (). Заголовок C ++ в коде, использующем DLL, будет сигнализировать об ошибке, но мне интересно, если бы вы изменили заголовок там, если бы вы могли обмануть его.
В любом случае, если вы действительно создали экземпляр Derived внутри своей DLL (через другую точку входа) , виртуальная таблица должна по-прежнему работать, поэтому, если вы это сделали:
Base* b = getTheDerived(); b->B();
, вы должны вызвать Derived :: B ().
поэтому ни один из ваших методов не должен быть доступен. Однако я вижу, что в моем тесте экспортируется Base :: B (). Заголовок C ++ в коде, использующем DLL, будет сигнализировать об ошибке, но мне интересно, если бы вы изменили заголовок там, если бы вы могли обмануть его.В любом случае, если вы действительно создали экземпляр Derived внутри своей DLL (через другую точку входа) виртуальная таблица должна работать, поэтому, если вы это сделали:
Base* b = getTheDerived(); b->B();
, вы должны вызвать Derived :: B ().
поэтому ни один из ваших методов не должен быть доступен. Тем не менее, я вижу, что в моем тесте экспортируется Base :: B (). Заголовок C ++ в коде, использующем DLL, будет указывать на ошибку, но мне интересно, если вы изменили заголовок там, если бы вы могли его обмануть.В любом случае, если вы действительно создали экземпляр Derived внутри своей DLL (через другую точку входа) , виртуальная таблица должна по-прежнему работать, поэтому, если вы это сделали:
Base* b = getTheDerived(); b->B();
, вы должны вызвать Derived :: B ().
Вы можете узнать из командной оболочки Visual Studio, набрав
link /dump /exports <yourdll>
. Если они экспортированы, вы увидите «украшенные имена» для функций. Чтобы увидеть их в удобочитаемом формате, скопируйте и вставьте один и выполните
undname <decorated name>
Нет, Derived не будет виден вне библиотеки DLL. Чтобы экспортировать производный класс, вам придется применить макрос DLLAPI также к производным классам.