CoreFoundation 클래스 및 Objective-C 클래스 브리지

1471 단어

OC 전환 CF

NSArray *anArray = @[@1,@2,@3,@4];
CFArrayRef aCFArray = (__bridge CFArrayRef)anArray;
NSLog(@"Size of array = %ld",CFArrayGetCount(aCFArray));
__bridge: ARC는 여전히 이 OC 대상의 보존권을 가지고 있다.
NSArray *anArray = @[@1,@2,@3,@4];
CFArrayRef aCFArray = (__bridge CFArrayRef)anArray;
NSLog(@"Size of array = %ld",CFArrayGetCount(aCFArray));
CFRelease(aCFArray);
__bridge_retained: ARC가 대상의 소유권을 넘겨주고 사용한 후에 CFRelease()를 호출해야 한다.

CF 전환 OC


사용__bridge__transfer

CoreFoundation에서 사전 만들기

const void* EOCRetainCallback(CFAllocatorRef allocator, const void *value)
{
    return CFRetain(value);
}

void EOCReleaseCallback(CFAllocatorRef allocator, const void *value)
{
    CFRelease(value);
}

CFDictionaryKeyCallBacks keyCallbacks = {
    0,
    EOCRetainCallback,
    EOCReleaseCallback,
    NULL,
    CFEqual,
    CFHash
};

CFDictionaryValueCallBacks valueCallbacks = {
    0,
    EOCRetainCallback,
    EOCReleaseCallback,
    NULL,
    CFEqual
};
CFMutableDictionaryRef aCFDictionary = CFDictionaryCreateMutable(NULL, 10, &keyCallbacks, &valueCallbacks);
        
NSMutableDictionary *anNSDictionary = (__bridge_transfer NSMutableDictionary*)aCFDictionary;

Foundation층의 사전은 키의 메모리 관리 의미가 '복사' 이고 값의 의미는 보존이다.사전에 새 키 값이 추가되면retain 함수를 호출합니다.CF층에서 사전을 직접 만들면 키 값의 메모리 관리 의미를 수정할 수 있습니다.

좋은 웹페이지 즐겨찾기