您的位置:首页 > 其它

学习小结8-----CoreFoundation当中的类型跟Foundation框架中的类型互相转换

2015-09-02 08:42 477 查看
CoreFoundation当中的类型跟Foundation框架中的类型互相转换

//COREFOUNDATION框架
        //创建的是一个CoreFoundation框架中的类型
        //CoreFoundation当中的类型可以跟Foundation框架中的类型互相转换
//        CFStringRef str = CFStringCreateWithFormat(kCFAllocatorDefault, NULL, (CFStringRef)@"test %d", 5);
//        
//        NSString *s = (NSString *)str;
//        
//        NSLog(@"s is %@", s);
//        
//        CFRelease(str);
        
        //在ARC中,需要对COREFOUNDATION框架中开辟的内存管理需要注意以下几点
        
        
        /*
         oc对象(ARC自动管理内存)--->   CF类型(ARC不做管理)
         
        __bridge_retained 这个桥接过程, ARC需要丢弃掉内存管理的权限
         
         */
        
        NSString *s1 = [NSString stringWithFormat:@"jack"];
        
//        CFStringRef s2 = (__bridge_retained CFStringRef) s1;
        CFStringRef s2 = CFBridgingRetain(s1);
        
        //...
        CFRelease(s2);
        
        /*
        CF类型(ARC不做管理) --->   oc对象(ARC自动管理内存)
         
         __bridge_transfer 这个桥接过程, 将CF类型的内存管理权限授权给OC的对象
         
         */
        CFStringRef str = CFStringCreateWithFormat(kCFAllocatorDefault, NULL, (CFStringRef)@"test %d", 5);
        
//        NSString *str2 = (__bridge_transfer NSString *) str;
        NSString *str2 = CFBridgingRelease(str);
        
        NSLog(@"str2 is %@", str2);
        
        //不需要释放,管理权限已经交给ARC
//        CFRelease(str2);
        
        
        /*
         __bridge桥接, 不做弃权,也不能授权
         */
        NSString *str3 = (__bridge NSString *)(str);
        NSLog(@"str3 is %@", str3);
        
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: