Могу ли я использовать зону памяти, чтобы убить утечки iPhone? -- iphone поле с участием memory-management поле с участием memory-leaks поле с участием malloc пол Связанный проблема

Can I use a memory zone to kill iPhone leaks?


0
vote

проблема

русский

У меня есть класс C ++, который я использую с моим контроллером Objective-C ++ в моем приложении iPhone. Класс C ++ делает некоторые расчеты на некоторых данных, возвращает результат, а затем выполняется - но он утечки, как сумасшедший. Мне интересно, сможете ли я как-то использовать зоны памяти (aka malloc Zones aka allocwithzone), чтобы решить это. Моя идея состоит в том, чтобы выделить объект OBJC ++ в новой зоне, а затем как-то есть объекты C ++, которые все будут автоматически созданы в этой новой зоне. Затем, когда он возвращается, я убиваю зону, и вся память будет автоматически восстановлена, даже если она была утечка.

Тем не менее: документация, по-видимому, указывает на то, что вы распределите объект в новой зоне x, объекты, которые оно распределяет не автоматически и быть в зоне x. Если это имеет смысл, никто знает, как Чтобы переопределить это поведение, чтобы все последующие распределения и Mallocs на этот объект будут в новой зоне X?

Редактировать:

  1. Я должен отметить, что нить будет работать в основном код C ++, большую кодовую базу, и это не экономно на данный момент, чтобы убить все утечки, поскольку она автоматически преобразована из Java и утечки, как сумасшедший повсюду (рефакторинг требуется ...). Спасибо за совет «Просто исправьте свои утечки», но это не практично в данный момент.

  2. Память не пропускается через objc allocations, но в основном через Arty C ++ новых вызовов (пару прямых mallocs). Если это имеет значение.

Английский оригинал

I have a C++ class that I'm using from my Objective-C++ controller in my iPhone app. The C++ class does some calculations on some data, returns a result, and then is done -- but it leaks like crazy. I'm wondering if I can somehow make use of Memory Zones (aka malloc zones aka allocWithZone) to solve this. My idea is to allocate the ObjC++ object in a new zone, and then somehow have the C++ objects all be automatically created in this new zone. Then, when it returns, I kill the zone, and all of the memory will automatically be recovered, even if it has been leaked.

However: the documentation seems to indicate if I allocation an object in a new zone X, objects that it allocs will not automatically also be in zone X. If that makes sense, does anyone know how to override that behaviour so that all subsequent allocs and mallocs by that object will be in the new zone X?

EDIT:

  1. I should note that the thread will be running mainly C++ code, a large code base, and it's not economical at this point to kill all of the leaks in it since it was automatically converted from Java and leaks like crazy all over the place (refactoring required...). Thanks for the "just fix your leaks" advice but that's not practical at the moment.

  2. The memory is not being leaked through ObjC allocations, but mainly through C++ array new calls (a couple of direct mallocs as well). If that makes a difference.

</div
           
 
 

Список ответов

7
 
vote
vote
Лучший ответ
 
<Р> Первоначально зоны в Objective-C были разработаны, чтобы дать возможность разработчика выделить кучу связанных объектов в зоне, а затем освободить их всех без индивидуально deallocating каждого экземпляра. <Р> На практике это оказалось непрактичным. Особенно когда-то был сделан переход от объекта к NSObject (от NeXTSTEP до OpenStep). <Р> реальность такова, что объект графики в приложениях, как правило, достаточно сложными, что полная изоляция зоны суб графа почти невозможно. В частности, вы не можете выделить, прямо или косвенно, любые объекты из базы компании Apple и ссылки трюма на них, потому что у вас нет возможности контролировать в зоне распределения на основе указанных объектов. <Р> Итак, нет, не делайте этого. Исправьте утечки. Там нет волшебной пули / механизма, чтобы избежать того, чтобы сделать ваш код на самом деле работает.
 

Originally, zones in Objective-C were designed to enable the developer to allocate a bunch of related objects in a zone and then release them all without individually deallocating each instance.

In practice, this proved to impractical. Especially once the move from Object to NSObject was made (from NeXTSTEP to OpenStep).

The reality is that object graphs within applications are generally complex enough that total zone isolation of a sub graph is nigh impossible. In particular, you can't allocate, directly or indirectly, any objects from Apple's frameworks and hold references to them because you have no way of controlling the zone based allocations of said objects.

So, no, don't do that. Fix your leaks. There is no magic bullet / mechanism to avoid having to make your code actually work.

</div
 
 
   
   
3
 
vote
<Р> Просто исправить ваши утечки памяти ...
 

Just fix your memory leaks...

</div
 
 
   
   
1
 
vote
<Р> Не является ли идея кода, так что не какие-либо утечки? Не потрудившись очистить утечки памяти плохой способ идти о бизнесе!
 

Isn't the idea to code so that there aren't any leaks? Not bothering to clean up memory leaks is a bad way to go about business!

</div
 
 
1
 
vote

То, что вы обсуждаете была частью оригинальной мысли с зонами, но этот аспект не работал так хорошо.

<Р> Способ избежать протечки просто, чтобы избежать протечек. Свободный что вы таНос, -release объекты, которые нужно освободить.
 

What you're discussing was part of the original thought with zones, but that aspect hasn't worked out so well.

The way to avoid leaking is just to avoid leaking. Free what you malloc, -release the objects you need to release.

</div
 
 
1
 
vote

Это действительно не то, что трудно держать от утечки. Это происходит, но вы найдете утечку и исправить ее. Чтобы создать другую систему, возможно, сложнее, чтобы избежать небольшого урегулирования и дисциплины, не стоит усилий.

 

It's really not that hard to keep from leaking. It happens, but you find the leak and fix it. To create another system, possibly complicated, to avoid a small bit of forethought and discipline, is not worth the effort.

</div
 
 

Связанный проблема

8  Как обрезать изображение в частях программно  ( How to crop image in to pieces programmatically ) 
Мне нужно разделить изображение на 9 штук программно. Любые предложения о том, как это сделать? ...

1  Не удается изменить размер кадра UiscrollView  ( Cannot resize uiscrollviews frame ) 
У меня есть UiscrollView с его рамой и содержимым с таким же размером. Я хочу изменить высоту кадра ScrollView, когда появится клавиатура, но она не работает....

1  Обновите и вставьте объемные данные XML в мою базу данных SQLite  ( Update and insert bulk xml data into my sqlite database ) 
Я хочу загрузить хостованный XML документ в базу данных My приложения SQLite, обновляя существующие строки или вставляя новые строки данных по мере необходимо...

0  Призматическое соединение вызывает сбой коробки2D (Cocos2D)  ( Prismatic joint causes a crash box2dcocos2d ) 
Я пытался настроить призматический сустав, но я получаю эту ошибку при выполнении времени: Ошибка утверждения: (заблокировано () == false), функциональная нас...

0  Не можете получить панель поиска для отображения в приложении iPhone  ( Cant get search bar to display in iphone application ) 
Я пытаюсь получить панель поиска для отображения в моем приложении. Я следую в примере Show в приложении TableSearch Sample. Я более или менее реализован ...

4  Основные данные Nsfetchrequest также выбирают детей объектов объекта  ( Core data nsfetchrequest also fetches children objects of the entity ) 
Я новичок в iOS Dev и основные данные. У меня есть родительский NsmanageObject <код> @class Units; @interface Properties : NSManagedObject @property (nonat...

0  вебсервис В Iphone SDK?  ( Webservice in iphone sdk ) 
<Р> я скачал WSDLObjC-0,6 от Google, чтобы включить SOAP веб-сервис в IPhone SDK.But это является, как App файл, как я могу интегрировать этот файл в iPhone SD...

3  Как создать универсальные приложения на iPhone / iPad?  ( How to create universal apps in iphone ipad ) 
Я хочу создать универсальные приложения. Я уже сделал несколько приложений для iPhone. Теперь я хочу начать универсальные приложения, что означает, что прилож...

15  Как получить все записи NSFetchedResultScontroller / NsmanageObjectContext?  ( How to get all entries of a nsfetchedresultscontroller nsmanagedobjectcontext ) 
У меня есть хорошее рабочее приложение для iPhone, которое работает с основными данными. Я использую NSFetchedResultScontroller / NSManageObjectContext, как о...

1  Как я могу получить токен доступа через API FBConnect?  ( How can i get access token through fbconnect api ) 
Я хочу знать, смогу ли я получить токен доступа через API FBConnect, используя SDK iPhone. Я могу получить один через fbgraph, но я хочу использовать fbconn...

57  Как динамически разместить высоту UiableViewCell  ( How to dynamically resize uitableviewcell height ) 
У меня есть классический сгруппированный UiableView с редактируемым UIrextViews внутри каждой ячейки. Этот текстовые представления могут быть одиночными или м...

2  IPhone UiableView подавляет кнопку раскрытия, когда кнопка «Удаление» отображается  ( Iphone uitableview suppress disclosure button when delete button is displayed ) 
У меня есть <код> UITableView , который имеет кнопку раскрытия на каждой строке. Когда таблица введена в режим редактирования, и управление удалением нажата (...

1  Нужно, чтобы получить доступ к URL в моем одном представлении ИОС приложения с помощью веб-просмотра  ( Need to access the url in my single view ios application using web view ) 
<Р> У меня есть один вопрос относительно WebView. У меня есть URL-адрес, и нужно, чтобы запустить этот URL в WebView. и мой код здесь идет .. <код> NSLog(@"R...

0  Получение неправильной аннотации от метода делегата MapView  ( Getting wrong annotation from mapview delegate method ) 
Я объявил следующее в своем файле .h: <Код> Annotation *annoForMoreDetails . Однако, когда я пытаюсь установить его в текущую аннотацию в методе <Код> -...

4  Создайте каталог на iPhone  ( Create a directory on an iphone ) 
Я хочу знать, как создать каталог на указанном пути. Я использовал "систему (" путь каталога ");" Это работает нормально в симуляторе, но не на устройстве ...

Связанный проблема

8  Как обрезать изображение в частях программно 
1  Не удается изменить размер кадра UiscrollView 
1  Обновите и вставьте объемные данные XML в мою базу данных SQLite 
0  Призматическое соединение вызывает сбой коробки2D (Cocos2D) 
0  Не можете получить панель поиска для отображения в приложении iPhone 
4  Основные данные Nsfetchrequest также выбирают детей объектов объекта 
0  вебсервис В Iphone SDK? 
3  Как создать универсальные приложения на iPhone / iPad? 
15  Как получить все записи NSFetchedResultScontroller / NsmanageObjectContext? 
1  Как я могу получить токен доступа через API FBConnect? 
57  Как динамически разместить высоту UiableViewCell 
2  IPhone UiableView подавляет кнопку раскрытия, когда кнопка «Удаление» отображается 
1  Нужно, чтобы получить доступ к URL в моем одном представлении ИОС приложения с помощью веб-просмотра 
0  Получение неправильной аннотации от метода делегата MapView 
4  Создайте каталог на iPhone 



© 2021 www.qaru.top All Rights Reserved. Q&A House все права защищены


Licensed under cc by-sa 3.0 with attribution required.