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_unretained
leaves는 연결하려는 개체가 할당 해제될 때 매달려 있는 포인터로 바뀔 수 있는 가능성을 열어 둡니다.후자는 당신이 사용했던 것과 같은 행동입니다.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
'programing' 카테고리의 다른 글
MySQL: 관계에 참여하지 않는 행 찾기 (0) | 2023.11.01 |
---|---|
Lazy div 배경 이미지를 로드하는 방법 (0) | 2023.11.01 |
다른 포트에 도커 mysql (0) | 2023.11.01 |
다른 열에 대한 MySql SELECT 조합? (0) | 2023.11.01 |
CSS에서 스타일 비활성화 버튼 (0) | 2023.11.01 |