Core Foundation 官方文档翻译

 

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
posted @ 2017-06-22 10:43  有棱角的圆  阅读(1857)  评论(0编辑  收藏  举报