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