美文网首页
静态内存分析-场景演练-桥接

静态内存分析-场景演练-桥接

作者: 流氓兔刘 | 来源:发表于2017-07-20 11:29 被阅读0次

    1.MRC环境下桥接

    - (void)MRC{

    //MRC下桥接

    //Foundation到CoreFoundation框架的数据类型转换

    NSString*str = [[NSStringalloc]init];

    //CFStringRef ,这种转换,属于直接转换,不会移交对象的内存管理

    CFStringRefstrRef = (CFStringRef)str;

    NSLog(@"%@",strRef);

    [strrelease];

    //CoreFoundation到Foundation框架的数据类型转换

    CFStringRefstrRef2 =CFStringCreateWithCString(CFAllocatorGetDefault(),"123",kCFStringEncodingUTF8);

    //这种转换,属于直接转换,不会移交对象的内存管理

    NSString*str2 = (NSString*)strRef2;

    NSLog(@"%@",str2);

    CFRelease(strRef2);

    }

    2.ARC环境下桥接

    - (void)ARC{

    //ARC下桥接

    //Foundation到CoreFoundation框架的数据类型转换

    NSString*str = [[NSStringalloc]init];

    //(__bridge CFStringRef)等同于MRC下面的直接转换,不会移交对象的内存管理

    //CFStringRef strRef = (__bridge CFStringRef)(str);

    //CFBridgingRetain == __bridge_retained CFStringRef

    //这种转换,会移交对象的内存管理

    CFStringRefstrRef = (__bridge_retainedCFStringRef)(str);

    NSLog(@"%@",strRef);

    CFRelease(strRef);

    //CoreFoundation到Foundation框架的数据类型转换

    CFStringRefstrRef2 =CFStringCreateWithCString(CFAllocatorGetDefault(),"123",kCFStringEncodingUTF8);

    //__bridge NSString *等同于MRC下面的直接转换,不会移交对象的内存管理

    //NSString *str2 = (__bridge NSString *)strRef2;

    //CFBridgingRelease == __bridge_transfer NSString *

    //这种转换,会移交对象的内存管理

    NSString*str2 = (__bridge_transferNSString*)strRef2;

    NSLog(@"%@",str2);

    // CFRelease(strRef2);

    }

    相关文章

      网友评论

          本文标题:静态内存分析-场景演练-桥接

          本文链接:https://www.haomeiwen.com/subject/kfmhattx.html