나는 다음과 같은 몇 가지 코드를 가지고 : 매우 자주C++에서 Obj-C 메시지를 호출 할 때 자동 보유/해제를 방지하려면?
@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와 해당 타이머가 통화 기간 동안 지속되므로 보유/릴리스가 필요 없다고 생각합니다.
전화를 걸 수있는 방법이 있습니까?
저는 ARC가 활성화 된 iOS 5 SDK와 함께 XCode 4.2를 사용하고 있습니다. ARC의 책임은 무엇이며이를 제거하면 보관/해지가 제거됩니까? (내 친구들과 함께 확인하기 전에 ARC가없는 프로젝트를 다시 작성하여 시간을 보내고 싶지 않다.)
내게이 코드는 ARC 규칙 중 하나를 위반하는 것처럼 보입니다. 즉, C 구조 (이 경우 C 구조로 계산되는 C++ 클래스)에 oject 포인터를 저장하지 마십시오. 따라서 적절한 대답은이 파일에 대해 ARC를 사용하지 않는 것입니다. http://developer.apple.com/library/ios/#releasenotes/ObjectiveC/RN-TransitioningToARC/_index.html – JeremyP
의견을 대답 대신 답으로 쓰지 않으시겠습니까? – squelart
왜 기억하지 못합니다. 아마도 나는 그 질문에 적절히 대답하지 못했을 것입니다. 그때 나는 ARC 프로그래밍을하지 않았습니다. – JeremyP