我有一些这样的代码:
@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
and objc_release
(可能在 m_holder 或 m_holder.timer 上),这最终会占用大量时间!删除__unsafe_unretained
并没有什么不同。
通过构造,我知道无论何时ExternalControl::getTimer()
调用, m_holder 及其计时器将在调用期间保持活动状态,因此我认为保留/释放是不必要的。
有什么方法可以防止他们被调用吗?
我将 XCode 4.2 与 iOS 5 SDK 一起使用,并启用了 ARC。ARC 是否负责并且删除它会删除保留/释放?(我不想花时间在没有 ARC 的情况下重新创建一个项目只是为了测试这个,然后再和我的朋友们核实一下!)