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);
官方定義:CFRange CFRangeMake(CFIndex loc, CFIndex len);
使用: CFRange cfRange = CFRangeMake(1, 3);
2.
CFComparatorFunction //回撥函式比較兩個值,返回值是CFComparisonResult型別。
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" 會有很多選擇器,選擇自己需要的。
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
官方定義: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庫版本號的巨集定義
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的位元組順序(我也不明白到底是什麼)。
官方定義: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
將從主機中的64位double位元組順序轉換為與平臺無關的格式。
CFSwappedFloat64 sf64 = CFConvertDoubleHostToSwapped(10.0);//道行淺,不知道到底有什麼用
延伸:CFConvertDoubleSwappedToHost
double CFConvertDoubleSwappedToHost(CFSwappedFloat64 arg);
和上面那個是逆向關係。
將從主機中的64位double位元組順序轉換為與平臺無關的格式。
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;
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
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