programing

ARC를 사용하고 iOS 4.0을 대상으로 할 때 약한 참조를 대체하려면 어떻게 해야 합니까?

css3 2023. 11. 1. 22:31

ARC를 사용하고 iOS 4.0을 대상으로 할 때 약한 참조를 대체하려면 어떻게 해야 합니까?

저는 Xcode 4.2로 첫 iOS 앱을 개발하기 시작했고, "유틸리티 애플리케이션" 템플릿(FlipsideViewController와 함께 제공되는 애플리케이션)으로 iOS 5.0을 목표로 하고 있었습니다.

저는 ARC가 컴파일 타임 기능이기 때문에 iOS 4와도 호환이 되어야 한다고 읽어서 제 앱을 4.3으로 목표로 삼고 컴파일을 시도했습니다.이렇게 하면 다음과 같은 오류가 발생합니다.

FlipsideViewController.m: 오류:자동 기준 카운팅 문제:현재 배포 대상이 자동화된 __weak 참조를 지원하지 않습니다.

다음 줄을 참조하고 있습니다.

@synthesize delegate = _delegate;

해당 변수는 다음과 같이 선언됩니다.

@property (weak, nonatomic) IBOutlet id <FlipsideViewControllerDelegate> delegate;

iOS 4에서는 "weak reference"가 지원되지 않는다는 것은 이해하지만, 왜 처음부터 weak reference를 사용하고 싶은지 잘 모르겠습니다. 또한 ARC를 활용하면서도 이를 사용하지 않도록 다시 쓰는 방법도 알 수 없습니다(결국 iOS 4 및 5에서 작동하는 것으로 되어 있죠?).

오래된 OS를 대상으로 하려면unsafe_unretained대신에weak당신의 재산 신고서에 기재되어 있고, 그것은 대부분 같은 방식으로 작동할 것입니다.weak그들의 목표가 사라질 때 그들 자신을 0으로 언급하지만,unsafe_unretainedleaves는 연결하려는 개체가 할당 해제될 때 매달려 있는 포인터로 바뀔 수 있는 가능성을 열어 둡니다.후자는 당신이 사용했던 것과 같은 행동입니다.assign수동 메모리 관리의 속성 선언으로서.

유지 사이클을 피하기 위해 이렇게 하는 것입니다. 제가 여기 답변에서 언급하는 바와 같습니다.원래 개체에 대한 강력한 포인터가 있을 수 있는 항목에 대한 강력한 포인터를 가지는 것을 원하지 않을 수 있습니다.그러면 아무것도 제대로 나오지 않을 겁니다.

추가적인 안전을 위해 약한 참조만 사용하는 경우, 사용 가능한 경우 수동으로 새 런타임 함수를 호출하고 간단한 할당으로 돌아갑니다.__unsafe_unretained그렇지 않은 경우 변수.

ZWRCompatibility.h는 이를 다소 단순화할 것입니다.

Mike Ash의 호환성 라이브러리 PLWeakCompatibility 덕분에 이제 iOS 4.x에서도 __weak을 간단히 사용할 수 있습니다.

구성이 매우 쉽고 5.x에 대한 추가적인 고려나 노력이 필요하지 않습니다.

언급URL : https://stackoverflow.com/questions/6893038/how-do-i-replace-weak-references-when-using-arc-and-targeting-ios-4-0