Core Foundation 官方文件翻譯

有稜角的圓發表於2017-06-22
 

Core Foundation框架中常用的隱含型別:
使用這些隱含型別時需要自己初始化,自己去釋放記憶體。所以需要記住,在初始化的同時在相應位置釋放。以防出現記憶體問題。
 

1.CFStringRef
其他方法用的時候可以檢視文件
 
-(void)testCFStringref{
    
    CFStringRef stringRef = CFSTR("我'是'一'串'字'符'串");
    CFStringRef seperatorStringRef = CFSTR("'");
    CFArrayRef stringArrayRef = CFStringCreateArrayBySeparatingStrings(kCFAllocatorDefault, stringRef, seperatorStringRef);
    
    CFStringRef combineStringRef = CFStringCreateByCombiningStrings(kCFAllocatorDefault, stringArrayRef, CFSTR("|"));
    
    CFStringRef copyStringRef = CFStringCreateCopy(kCFAllocatorDefault, stringRef);
    
    
    NSLog(@"count = %ld combine: %@ copyStringRef:%@",CFArrayGetCount(stringArrayRef),combineStringRef,copyStringRef);
    
    
    CFRelease(stringRef);
    CFRelease(seperatorStringRef);
    CFRelease(stringArrayRef);
    CFRelease(combineStringRef);
    CFRelease(copyStringRef);
    
}


 2、 CFArrayRef,還有很多其他方法可以在官方文件中檢視

-(void)testCFArrayRef{
    //準換CFArrayRef < --- > NSArray
    CFArrayRef cfArr = (__bridge CFArrayRef) @[@"1",@"2",@"3"];
    NSArray *nsarr = (__bridge NSArray *)(cfArr);
    
    
    CFStringRef values[3];
    values[0] = CFSTR("cf1");
    values[1] = CFSTR("cf2");
    values[2] = CFSTR("cf3");
    
    //初始化一個CF陣列
    //不可變
    CFArrayRef  cfArray = CFArrayCreate(kCFAllocatorDefault,(void*)values, 3, NULL);
    
    CFArrayRef cfArrayCopyNew = CFArrayCreateCopy(kCFAllocatorDefault, cfArray);
    
    //可變
    CFMutableArrayRef muArrayRef1 = CFArrayCreateMutable(kCFAllocatorDefault, 0, NULL);
    //新增元素
    CFArrayAppendValue(muArrayRef1, CFSTR("新增的第一個元素"));
    CFArrayAppendValue(muArrayRef1, CFSTR("新增的第二個元素"));
    
    CFMutableArrayRef muArrayRef2 = CFArrayCreateMutableCopy(kCFAllocatorDefault, 0, muArrayRef1);
    
    
    NSLog(@"%ld %ld %ld %ld %ld %ld",CFArrayGetCount(cfArray),CFArrayGetCount(cfArr),nsarr.count,CFArrayGetCount(cfArrayCopyNew),CFArrayGetCount(muArrayRef1),CFArrayGetCount(muArrayRef2));
    NSLog(@"%@ %@ %@ %@ %@ %@ ",CFArrayGetValueAtIndex(cfArr, 1),CFArrayGetValueAtIndex(cfArray, 1),nsarr[1],CFArrayGetValueAtIndex(cfArrayCopyNew, 1),CFArrayGetValueAtIndex(muArrayRef1, 1),CFArrayGetValueAtIndex(muArrayRef2, 1));
    
    //使用完需要release掉
    
    CFRelease(cfArr);
    CFRelease(values);
    CFRelease(cfArray);
    CFRelease(cfArrayCopyNew);
    CFRelease(muArrayRef1);
    CFRelease(muArrayRef2);
}

 

3.CFDictionaryRef & CFMutableDictionaryRef
 

-(void)testCFDictionaryRef{
    
    CFStringRef keys[3];
    CFStringRef values[3];
    keys[0] = CFSTR("key1");
    keys[1] = CFSTR("key2");
    keys[2] = CFSTR("key3");
    values[0] = CFSTR("不可變陣列ref value1");
    values[1] = CFSTR("不可變陣列ref value2");
    values[2] = CFSTR("不可變陣列ref value3");
    
    CFDictionaryRef dictionaryRef1 = CFDictionaryCreate(kCFAllocatorDefault, (void *)keys, (void *)values,3, NULL, NULL);
    CFDictionaryRef dictionaryRef2 = CFDictionaryCreateCopy(kCFAllocatorDefault, dictionaryRef1);
    
    CFMutableDictionaryRef muDicRef1 = CFDictionaryCreateMutable(kCFAllocatorDefault, 0, NULL, NULL);
    CFDictionaryAddValue(muDicRef1, CFSTR("key1"), CFSTR("可變陣列ref value1"));
    //0表示不限制個數
    CFMutableDictionaryRef muDicRef2 = CFDictionaryCreateMutableCopy(kCFAllocatorDefault, 0, muDicRef1);
    
    
    NSLog(@"%@,%@,%@,%@",CFDictionaryGetValue(dictionaryRef1, CFSTR("key1")),CFDictionaryGetValue(dictionaryRef2, CFSTR("key1")),CFDictionaryGetValue(muDicRef1, CFSTR("key1")),CFDictionaryGetValue(muDicRef2, CFSTR("key1")));
    
    //使用完要release
    CFRelease(dictionaryRef1);
    CFRelease(dictionaryRef2);
    CFRelease(muDicRef1);
    CFRelease(muDicRef2);
    CFRelease(keys);
    CFRelease(values);
}

 





 
未完,一個個看著呢

1
CFRange //類似於NSRange(第一個引數是起始位置,第二個引數是長度length
官方定義:CFRange CFRangeMake(CFIndex loc, CFIndex len);
使用: CFRange cfRange = CFRangeMake(1, 3);
 
2. 
CFComparatorFunction  //回撥函式比較兩個值,返回值是CFComparisonResult型別。
     CFComparisonResult //是一個列舉型別:
         官方定義為:
     typedef CF_ENUM(CFIndex, CFComparisonResult) {
     kCFCompareLessThan = -1L,//<
     kCFCompareEqualTo = 0,//=
     kCFCompareGreaterThan = 1//>
     };
     typedef CFComparisonResult (*CFComparatorFunction)(const void *val1, const void *val2, void *context);
     val1:第一個需要比較的value
     val2:第二個需要比較的value
     context:一個無型別的指標,指向評估的上下文。該值的含義及其用法由每個比較器函式定義。 該值通常傳遞給一個排序函式,例如CFArraySortValues,然後將其不變地傳遞給比較器函式。
     使用:輸入"CFCompare" 會有很多選擇器,選擇自己需要的。

3.
     CFIndex 用於kAXPriorityKey的優先順序值
     官方定義:typedef long CFIndex;
     使用:CFIndex index = 5;
    
   
4
    
     CFOptionFlags
     用於將特殊分配和其他請求傳遞給Core Foundation功能的位域。
     官方定義:typedef unsigned long CFOptionFlags;
 
5
常量:
     a. kCFNotFound //Core Foundation功能無法找到請求的值時,返回這個特殊值。
     官方定義:static const CFIndex kCFNotFound = -1;
     b. kCFCoreFoundationVersionNumber //當前Core Foundation庫的版本號
     官方定義:Command+游標進去看看就可以了。
     延伸:Mac iOS平臺關於Core Foundation庫版本號的巨集定義
 
 6
CFByteOrder
     官方定義:typedef CFIndex CFByteOrder;
    
     #if CF_USE_OSBYTEORDER_H
     int32_t byteOrder = OSHostByteOrder();
     switch (byteOrder) {
     case OSLittleEndian: return CFByteOrderLittleEndian;
     case OSBigEndian: return CFByteOrderBigEndian;
     default: break;
     }
     return CFByteOrderUnknown;
     #else
     #if __LITTLE_ENDIAN__
     return CFByteOrderLittleEndian;
     #elif __BIG_ENDIAN__
     return CFByteOrderBigEndian;
     #else
     return CFByteOrderUnknown;
     #endif
     #endif
     使用:NSLog(@"%ld",CFByteOrderGetCurrent());
     獲取當前CPU的位元組順序(我也不明白到底是什麼)。
 
7
CFConvertDoubleHostToSwapped
     將從主機中的64double位元組順序轉換為與平臺無關的格式。
     CFSwappedFloat64 sf64 = CFConvertDoubleHostToSwapped(10.0);//道行淺,不知道到底有什麼用
    
     延伸:CFConvertDoubleSwappedToHost
     double CFConvertDoubleSwappedToHost(CFSwappedFloat64 arg);
     和上面那個是逆向關係。
下面這些屬性,和上面這兩個類似,用於型別轉換:
 
8
    Core Foundation URL Access Utilities URL訪問相關
     a. Boolean CFURLCreateDataAndPropertiesFromResource(CFAllocatorRef alloc, CFURLRef url, CFDataRef *resourceData, CFDictionaryRef *properties, CFArrayRef desiredProperties, SInt32 *errorCode);
     b. CFTypeRef CFURLCreatePropertyFromResource(CFAllocatorRef alloc, CFURLRef url, CFStringRef property, SInt32 *errorCode);
     c. Boolean CFURLDestroyResource(CFURLRef url, SInt32 *errorCode);
     d. Boolean CFURLWriteDataAndPropertiesToResource(CFURLRef url, CFDataRef dataToWrite, CFDictionaryRef propertiesToWrite, SInt32 *errorCode);
     const CFStringRef kCFURLFileLength;

9
CFURLError
     Declaration
    
     typedef enum CFURLError : CFIndex {
     kCFURLUnknownError = -10L,
     kCFURLUnknownSchemeError = -11L,
     kCFURLResourceNotFoundError = -12L,
     kCFURLResourceAccessViolationError = -13L,
     kCFURLRemoteHostUnavailableError = -14L,
     kCFURLImproperArgumentsError = -15L,
     kCFURLUnknownPropertyKeyError = -16L,
     kCFURLPropertyKeyUnavailableError = -17L,
     kCFURLTimeoutError = -18L
     } CFURLError;
10    
File URL Properties

相關文章