Управление памятью объекта Objective-c в классе c++


Я пишу какое-то приложение для iOS и стою перед решением, включать ли objective-c объект в класс c++. После нескольких часов поиска в Интернете я обнаружил, что обсуждения использования (иногда люди используют "обертывание" вместо "использования") класса c++ в objective-c многочисленны, в то время как противоположное довольно ограничено. Итак, мой первый вопрос: считается ли уместным (а иногда даже необходимым/удобным) иметь objective-c data member в классе c++?

Если это вполне нормально практика написания iOS-приложения, Что касается памяти, как я могу управлять членом objective-c data в классе c++, 1) используя ARC и 2) используя MRC? В частности, есть ли какое-либо эмпирическое правило, которое я должен знать, чтобы правильно написать конструктор и деструктор для класса c++, который имеет член objective-c?

1 3

1 ответ:

Да, вы можете сделать это. В этом нет ничего необычного.

  1. В ARC: вы просто используете его, и он работает. Обратите внимание, что если вы помещаете член данных Objective-C в класс без конструкторов или деструкторов (класс "POD"), вы получите предупреждение, потому что плохие вещи произойдут, если это определение будет импортировано как в ARC, так и в MRC-код. Решение в этом случае заключается в добавлении фиктивного конструктора или деструктора.

  2. В MRC: вам нужно сохранить и освободить его после нормального MRC правила управления памятью для переменных экземпляра. то есть, если вы назначаете ему, убедитесь, что освободили Предыдущее значение и сохранили новое значение. В деструкторе класса (добавьте деструктор, если его еще нет) вам нужно освободить его. Кроме того, в конструкторе обязательно инициализируйте указатель объекта (либо на nil, либо на какое-то другое значение), поскольку указатели в C/C++ не инициализируются автоматически.