2017-01-08 5 views
0

iOS 앱에서 ARC와 함께 Swift 3을 사용하고 있으며 수동으로 객체를 유지하려고합니다.신속하게 ARC를 사용하여 수동으로 유지하려면 어떻게해야합니까?

Xcode에서는 object.retain()을 시도했지만 ARC 모드에서는 사용할 수 없다고 말합니다. 이 작업을 수행 할 수있는 다른 방법이 있습니까?


긴 버전 :

은 내가 CLLocationManager의 대리인으로 자신을 등록하는 LocationTracker 클래스가 있습니다. 사용자의 위치가 변경되면 location이라는 정적 변수가 업데이트됩니다. 위치를 필요로하는 내 코드의 다른 부분은 LocationTracker 인스턴스에 대한 참조가 없거나 필요없이이 정적 변수에 액세스합니다.

이 디자인의 문제점은 대리자가 유지되지 않으므로 CLLocationManager가 메시지를 보내는 시점까지 LocationTracker가 할당 취소되어 충돌을 일으키는 것입니다.

델리게이트로 설정하기 전에 수동으로 LocationTracker의 참조를 증가시키고 싶습니다. 앱이 실행되는 동안 위치를 모니터링해야하기 때문에 객체는 절대 할당 해제되지 않습니다.

LocationTracker에 대한 참조를 유지하는 정적 변수 '인스턴스'가있는 임시 해결책을 찾았습니다. 내가 '인스턴스'변수를 사용하지 않을 것이므로이 디자인이 우아하지 않다고 생각합니다. 그것을 없애고 명시 적으로 refcount를 증가시킬 수 있습니까?

other question은 Objective-C에 관한 것이므로이 질문은 복제본과 관련이 없지만이 부분은 Swift에 관한 부분입니다.

+0

[ARC가있는 수동 개체 유효 기간] 가능한 복제본 (http://stackoverflow.com/questions/10489995/manual-object-lifetime-with-arc) – CRD

+0

중복되지 않습니다. 그 이유를 묻는 질문을 편집했습니다. –

+0

제시된 해결책 중 많은 부분이 Objective-C와 마찬가지로 Swift에 적용 가능하다는 것을 알게 될 것입니다. 그들에게 시도해보고 당신에게 적합한 해결책을 찾을 수 있습니다. HTH – CRD

답변

0

ARC에서 유일한 해결책은 어딘가에서 강력한 참조를 유지하는 것입니다. 실제로 현재 구현이 최상의 솔루션입니다. 위치 추적기 클래스가 자신을 참조 할 수있게하여 주변을 지키도록하십시오.

수행중인 작업을 구현하는 데는 여러 가지 방법이 있지만 ARC에서 retain을 호출 할 방법이 없습니다.

+0

안전하지 않은 코드에서도? –

+0

안전하지 않은 코드의 의미를 모르겠습니다. – rmaddy

+0

Chris Lattner가 http://atp.fm/episodes/205에서 지적한 것처럼 refcounts를 수동으로 제어하는 ​​방법. –

관련 문제