Core Foundation 프레임워크(CoreFoundation.framework)는 iOS 애플리케이션에 대한 기본적인 데이터 관리 및 서비스 기능을 제공하는 C 언어 인터페이스 집합입니다. 다음은 프레임워크가 관리를 위해 지원하는 데이터와 제공할 수 있는 서비스 목록입니다.
그룹 데이터 유형(배열, 컬렉션 등)
패키지
문자열 관리
날짜 및 시간 관리
원본 데이터 블록 관리
선호도 관리
URL 및 데이터 흐름 작업
스레드와 RunLoop
포트와 소켓 통신
Core Foundation 프레임워크와 Foundation 프레임워크는 밀접하게 연관되어 있으며 동일한 기능에 대한 인터페이스를 제공하지만 Foundation 프레임워크는 Objective-C 인터페이스를 제공합니다. Foundation 개체를 Core Foundation 유형과 혼합하면 두 프레임워크 간의 "무료 브리징"을 활용할 수 있습니다. 소위 무료 브리징은 특정 프레임워크의 메서드나 기능에서 Core Foundation 및 Foundation 프레임워크의 특정 유형을 동시에 사용할 수 있음을 의미합니다. 그룹 및 문자열 데이터 유형을 포함하여 많은 데이터 유형이 이 기능을 지원합니다. 각 프레임워크의 클래스 및 유형 설명은 개체가 무료 브리지인지 여부와 브리지해야 하는 개체를 설명합니다.
Objective-C 포인터와 CoreFoundation 포인터 간의 변환
ARC는 Objective-C 포인터(보유, 릴리스, 자동 릴리스)만 관리하고 CoreFoundation 포인터는 관리하지 않습니다. CF 포인터는 CFRetain 및 CFRelease에 의해 수동으로 관리 및 관리됩니다.
CocoaFoundation 포인터와 CoreFoundation 포인터를 변환할 때는 포인티드 객체의 소유권을 고려해야 합니다. ARC는 관리를 위해 3가지 수정자를 제공합니다.
1. __bridge는 아무것도 하지 않고 변환만 합니다. 이 경우:
i) Cocoa에서 Core로 변환하려면 수동 CFRetain이 필요합니다. 그렇지 않으면 Cocoa 포인터가 해제된 후 전달된 포인터가 유효하지 않게 됩니다.
ii) Core에서 Cocoa로 변환하려면 수동 CFRelease가 필요합니다. 그렇지 않으면 Cocoa 포인터가 해제된 후에도 객체 참조 횟수는 여전히 1이고 삭제되지 않습니다.
2. __bridge_retained는 변환 후 자동으로 CFRetain을 호출하여 위의 상황을 자동으로 해결하는 데 도움이 됩니다.
3. __bridge_transfer는 변환 후 자동으로 CFRelease를 호출하여 위의 ii 상황을 자동으로 해결하는 데 도움이 됩니다.
ARC는 Core Foundation Object의 수명주기를 관리할 수 없으므로 Core Foundation과 ARC 간에 세 가지 변환 키워드인 __bridge, __bridge_retained 및 __bridge_transfer를 사용해야 합니다.
Apple의 공식 문서에 따르면(https://developer.apple.com/library/i...):
__bridge는 유형 변환만 하고 객체(메모리) 관리 권한은 수정하지 않습니다.
__bridge_retained(CFBridgingRetain도 사용 가능)는 Objective-C 객체를 Core Foundation 객체로 변환하는 동시에 객체(메모리) 관리를 우리에게 넘겨줍니다. 이후에는 CFRelease 또는 관련 메서드를 사용해야 합니다. 객체를 해제하세요.
__bridge_transfer(CFBridgingRelease도 사용 가능)는 Core Foundation 객체를 Objective-C 객체로 변환하는 동시에 객체 관리(메모리)를 ARC에 넘깁니다.
Core Foundation 프레임워크(CoreFoundation.framework)는 iOS 애플리케이션에 대한 기본적인 데이터 관리 및 서비스 기능을 제공하는 C 언어 인터페이스 집합입니다. 다음은 프레임워크가 관리를 위해 지원하는 데이터와 제공할 수 있는 서비스 목록입니다.
그룹 데이터 유형(배열, 컬렉션 등)
패키지
문자열 관리
날짜 및 시간 관리
원본 데이터 블록 관리
선호도 관리
URL 및 데이터 흐름 작업
스레드와 RunLoop
포트와 소켓 통신
Core Foundation 프레임워크와 Foundation 프레임워크는 밀접하게 연관되어 있으며 동일한 기능에 대한 인터페이스를 제공하지만 Foundation 프레임워크는 Objective-C 인터페이스를 제공합니다. Foundation 개체를 Core Foundation 유형과 혼합하면 두 프레임워크 간의 "무료 브리징"을 활용할 수 있습니다. 소위 무료 브리징은 특정 프레임워크의 메서드나 기능에서 Core Foundation 및 Foundation 프레임워크의 특정 유형을 동시에 사용할 수 있음을 의미합니다. 그룹 및 문자열 데이터 유형을 포함하여 많은 데이터 유형이 이 기능을 지원합니다. 각 프레임워크의 클래스 및 유형 설명은 개체가 무료 브리지인지 여부와 브리지해야 하는 개체를 설명합니다.
Objective-C 포인터와 CoreFoundation 포인터 간의 변환
ARC는 Objective-C 포인터(보유, 릴리스, 자동 릴리스)만 관리하고 CoreFoundation 포인터는 관리하지 않습니다. CF 포인터는 CFRetain 및 CFRelease에 의해 수동으로 관리 및 관리됩니다.
CocoaFoundation 포인터와 CoreFoundation 포인터를 변환할 때는 포인티드 객체의 소유권을 고려해야 합니다. ARC는 관리를 위해 3가지 수정자를 제공합니다.
1. __bridge는 아무것도 하지 않고 변환만 합니다. 이 경우:
i) Cocoa에서 Core로 변환하려면 수동 CFRetain이 필요합니다. 그렇지 않으면 Cocoa 포인터가 해제된 후 전달된 포인터가 유효하지 않게 됩니다.
ii) Core에서 Cocoa로 변환하려면 수동 CFRelease가 필요합니다. 그렇지 않으면 Cocoa 포인터가 해제된 후에도 객체 참조 횟수는 여전히 1이고 삭제되지 않습니다.
2. __bridge_retained는 변환 후 자동으로 CFRetain을 호출하여 위의 상황을 자동으로 해결하는 데 도움이 됩니다.
3. __bridge_transfer는 변환 후 자동으로 CFRelease를 호출하여 위의 ii 상황을 자동으로 해결하는 데 도움이 됩니다.
ARC는 Core Foundation Object의 수명주기를 관리할 수 없으므로 Core Foundation과 ARC 간에 세 가지 변환 키워드인 __bridge, __bridge_retained 및 __bridge_transfer를 사용해야 합니다.
Apple의 공식 문서에 따르면(https://developer.apple.com/library/i...):
__bridge는 유형 변환만 하고 객체(메모리) 관리 권한은 수정하지 않습니다.
__bridge_retained(CFBridgingRetain도 사용 가능)는 Objective-C 객체를 Core Foundation 객체로 변환하는 동시에 객체(메모리) 관리를 우리에게 넘겨줍니다. 이후에는 CFRelease 또는 관련 메서드를 사용해야 합니다. 객체를 해제하세요.
__bridge_transfer(CFBridgingRelease도 사용 가능)는 Core Foundation 객체를 Objective-C 객체로 변환하는 동시에 객체 관리(메모리)를 ARC에 넘깁니다.