2015-01-12 4 views
1

У меня есть объект, который Parse отказывает мне в спасении из-за его предела 128kB ... После этого удобного сообщения SO: Checking the size of an object in Objective-C, я смог вывести размер мой объект, о котором идет речь, как 144 (malloc_size не относится к его единицам, но я принял байты). Если это находится в kB, мой объект действительно превышает предел 128 КБ. Тем не менее, этот объект никогда не должен находиться в диапазоне kB - это два указателя и три NSNumbers (используются как логические значения) ... Даже если учитывать издержки и избыточные ресурсы объекта в 64-битной системе, мы все еще находимся в 200 байт диапазон - с накладными Parse, мы будем в безопасности и скажем 1 кБ. Тем не менее ... намного меньше 128 КБ.ObjC Object Memory Profiling/Parse iOS 128kB Limit

Специфическая ошибка: Error: The object is too large -- should be less than 128 kB. (Code: 116, Version: 1.5.0)

Это заставило меня задуматься - что некоторые хорошие инструменты для тестирования или войти заявления для отладки такого рода проблемы? Я в основном знаком с профайлерами Apple и стандартными инструментами C/C++, такими как Valgrind, но я не уверен в интроспекции памяти на конкретном объекте, чтобы определить, какой атрибут заставляет его RAM ...

Подробнее проект, указанный выше. Какую обманку использует Parse, так что три NSNumbers и два указателя занимают 128 КБ при сохранении и как мне отлаживать это?

ответ

0

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

2

Для тех, кто ищет ответ на вопрос, почему Parse дает эту ошибку - ответ есть ошибка в Parse. Я взял предложение Райана и дополнительно отладил точки останова, и объекты действительно нигде не были близки к размеру, о котором утверждал Parse.

Я очистил базу данных анализа - ошибка исчезла по всем направлениям и не вернулась с тех пор.

Для тех, кто хочет выполнить профилирование, встроенный профилировщик Apple является хорошим местом для запуска (Product-> Profile-> Allocations) - после этого выводя размер памяти на определенные переменные-члены из ссылки в исходном вопросе, а затем, когда все остальное не удается, используя точки останова и размеры печати в консоли LLVM.

К сожалению, я не смог найти более автоматический способ сделать все это.

Надеюсь, что это поможет кому-то в будущем.

+0

Рад, что вы нашли исправление! –