iOS-두 가지 흔 한 브리지 방식

1253 단어 iOS 개발
CoreFoundation 의 함 수 를 사용 하 는 경우 가 많 으 며,반환 값 은 CoreFoundation 프레임 의 대상 이 며,Foundation 프레임 의 대상 으로 전환 하려 면 브리지 방식 으로 해결 할 수 있다.
예제 코드:
CFStringRef firstname = ABRecordCopyValue(person, kABPersonFirstNameProperty);
CFStringRef lastname = ABRecordCopyValue(person, kABPersonLastNameProperty);
    
NSString *firstName = (__bridge NSString *)(firstname);
NSString *lastName = (__bridge NSString *)(lastname);

그러나 이런 브리지 방식 을 사용 하면 메모리 유출 이 발생 할 수 있다.
ARC 모드 에서 CoreFoundation 함 수 를 사용 하려 면 메모리 유출 문 제 를 고려 해 야 합 니 다.위의 브리지 방식 은 CoreFoundation 프레임 워 크 의 대상 소유권 을 Foundation 프레임 워 크 에 맡 기 는 것 일 뿐 이 대상 의 메모 리 를 관리 할 수 없습니다.이 대상 의 메모 리 를 관리 하려 면 다른 브리지 방식 을 사용 하면 됩 니 다.
예제 코드:
NSString *firstName = (__bridge_transfer NSString *)(firstname);
NSString *lastName = (__bridge_transfer NSString *)(lastname);

요약:
__bridge type:CoreFoundation 프레임 워 크 의 대상 소유권 을 Foundation 프레임 워 크 에 맡 겨 사용 하지만 Foundation 프레임 워 크 의 대상 은 해당 대상 의 메모 리 를 관리 할 수 없습니다.
__bridge_transfer Objective-C type:CoreFoundation 프레임 워 크 의 대상 소유권 을 Foundation 에 넘 겨 관리 합 니 다.Foundation 에서 대상 이 폐기 되면 이전 대상(CoreFoundation)은 함께 폐기 합 니 다.
사용bridge_transfer Objective-C type 이런 브리지 방식 은 앞으로 스스로 메모리 관 리 를 할 필요 가 없습니다!

좋은 웹페이지 즐겨찾기