Как я могу хранить объекты Swift/Objective-C с автоматическим подсчетом ссылок на карте C++, не вызывая утечек памяти пр ⇐ C++
Как я могу хранить объекты Swift/Objective-C с автоматическим подсчетом ссылок на карте C++, не вызывая утечек памяти пр
У меня есть карта C++, которая управляет загруженными регионами. С каждым регионом связан MTLBuffer для геометрии, созданной после преобразования данных региона в сетку. Идея состоит в том, чтобы сохранить ссылку на каждый буфер внутри карты C++, чтобы все регионы и связанные с ними данные были в одной структуре данных. Я мог бы использовать этот псевдокод Objective-C++:
struct Region { недействительный *буфер; // Другие поля }; std::unordered_map loading_regions; void render_region(Регион *region) { вершины с плавающей запятой[MAX_SIZE]; беззнаковая длина; // ... // Есть несколько способов сделать это. Одним из них может быть: map[positon].buffer = [device newBufferWithBytes: длина вершин: параметры длины: MTLStorageModeShared]; // Я также мог бы передать «вершины» какой-нибудь внешней функции, определенной в Swift, которая создает новый «MTLBuffer» и возвращает его. // Затем он преобразуется в простой указатель и сохраняется на карте. } Однако, когда регионы удаляются с карты, например, с помощью такой функции:
void delete_region(uint16_t позиция) { Регион *регион = загруженные_регионы[позиция]; // ... карта.стирание(позиция); удалить позицию; } Как я могу гарантировать, что все сохраненные ссылки на объекты Swift или ссылки на объекты Objective-C будут правильно освобождены и не будет вызвана утечка памяти, если у меня включен ARC?
Возможно ли это, или мне просто нужно будет создать Swift Dictionary или Objective-C NSDictionary для хранения этих буферов независимо от карты C++, в которой хранится действие регионы?
Когда ARC включен, Xcode не позволит использовать сообщения release напрямую, поэтому я не знаю, как еще вручную освободить память.
У меня есть карта C++, которая управляет загруженными регионами. С каждым регионом связан MTLBuffer для геометрии, созданной после преобразования данных региона в сетку. Идея состоит в том, чтобы сохранить ссылку на каждый буфер внутри карты C++, чтобы все регионы и связанные с ними данные были в одной структуре данных. Я мог бы использовать этот псевдокод Objective-C++:
struct Region { недействительный *буфер; // Другие поля }; std::unordered_map loading_regions; void render_region(Регион *region) { вершины с плавающей запятой[MAX_SIZE]; беззнаковая длина; // ... // Есть несколько способов сделать это. Одним из них может быть: map[positon].buffer = [device newBufferWithBytes: длина вершин: параметры длины: MTLStorageModeShared]; // Я также мог бы передать «вершины» какой-нибудь внешней функции, определенной в Swift, которая создает новый «MTLBuffer» и возвращает его. // Затем он преобразуется в простой указатель и сохраняется на карте. } Однако, когда регионы удаляются с карты, например, с помощью такой функции:
void delete_region(uint16_t позиция) { Регион *регион = загруженные_регионы[позиция]; // ... карта.стирание(позиция); удалить позицию; } Как я могу гарантировать, что все сохраненные ссылки на объекты Swift или ссылки на объекты Objective-C будут правильно освобождены и не будет вызвана утечка памяти, если у меня включен ARC?
Возможно ли это, или мне просто нужно будет создать Swift Dictionary или Objective-C NSDictionary для хранения этих буферов независимо от карты C++, в которой хранится действие регионы?
Когда ARC включен, Xcode не позволит использовать сообщения release напрямую, поэтому я не знаю, как еще вручную освободить память.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Не удалось собрать модуль Objective-C при использовании Swift в модуле Objective-C.
Anonymous » » в форуме IOS - 0 Ответы
- 29 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Лучший способ протестировать просмотр ссылок в подаче, используя Swift или Objective-C
Anonymous » » в форуме IOS - 0 Ответы
- 1 Просмотры
-
Последнее сообщение Anonymous
-