• 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
  • 相关阅读:
    springboot+mybatis集成多数据源MySQL/Oracle/SqlServer
    向Spring容器中注册组件的方法汇总小结
    使用spring initialization创建SpringBoot项目
    mybatis-generator 的坑我都走了一遍
    初识Jsp,JavaBean,Servlet以及一个简单mvc模式的登录界面
    【Linux】用户只显示$问题
    【Linux】Ubuntu创建用户、删除用户、设置用户密码,root和普通用户切换
    【linux】ubuntu安装ssh
    【整理】【JS】map的基本操作
    【整理】【JS】数组定义、添加、删除、替换、遍历基本操作
  • 原文地址:https://www.cnblogs.com/sunjianfei/p/7063706.html
Copyright © 2020-2023  润新知