У меня есть такой код:
@interface MyTimer : NSObject
- (int)getValue;
@end
@interface TimerHolder : NSObject {
ExternalControl* m_externalControl;
}
@property (retain, nonatomic) MyTimer* timer;
@end
class ExternalControl {
__unsafe_unretained TimerHolder* m_holder;
public:
ExternalControl(TimerHolder* holder) : m_holder(holder);
int getTimer() { return [m_holder.timer getValue] };
};
Метод ExternalControl::getTimer()
вызывается очень часто.Во время профилирования я заметил, что во время вызова getTimer()
, obc-j также вызывает objc_retain
и objc_release
(предположительно для m_holder или m_holder.timer), что приводит к тому, что он затрачивает много времени!Удаление __unsafe_unretained
не имело значения.
По построению я знаю, что всякий раз, когда вызывается ExternalControl::getTimer()
, m_holder и его таймер будут оставаться в живых на время вызова, поэтому я думаю, что сохраняет /релизы не нужны.
Есть ли способ предотвратить их вызов?
Я использую XCode 4.2 с iOS 5 SDK, с включенной ARC.Ответственен ли ARC, и удаление его приведет к удалению удержаний / выпусков?(Я не хотел тратить время на воссоздание проекта без ARC, просто чтобы проверить это, прежде чем проверять вас, друзья!)