混合开发之(C-OC)注意点

1 篇文章 0 订阅

桥接 (__bridge) :C OC 之间传递数据的时候需要使用桥接!

    1.内存管理:

  • OC ,如果是在 ARC环境下开发,编译器在编译的时候会根据代码结构,自动为 OC 代码添加retain/release/autorelease
  • 但是, ARC只负责 OC 部分的内存管理!不会负责 C 语言部分代码的内存管理!也就是说!即使是在 ARC 的开发环境中!如果使用的 C 语言代码出现了 retain/copy/new/create等字样呢!我们都需要手动为其添加 release 操作!否则会出现内存泄露!  
  • 在混合开发时(C OC 代码混合),C OC 之间传递数据需要使用 __bridge 桥接,目的就是为了告诉编译器如何管理内存;
  • MRC中不需要使用桥接! 因为都需要手动进行内存管理!

    2.数据类型转换:

        Foundation Core Foundation框架的数据类型可以互相转换的

        Foundation :  OC

        Core Foundation : C语言

    e.g.1:

        NSString *str = @"123"; // Foundation

        CFStringRef str2 = (__bridge CFStringRef)str; // Core Foundation

        NSString *str3 = (__bridge NSString *)str2;

            CFArrayRef ---- NSArray

            CFDictionaryRef ---- NSDictionary

            CFNumberRef ---- NSNumber


        Core Foundation中手动创建的数据类型,都需要手动释放

    e.g.2:

        CGPathRef path = CGPathCreateMutable();

         CGPathRetain(path);

        CGPathRelease(path);

         CGPathRelease(path);


    3.桥接的添加:

        利用 Xcode 提示自动添加! --简单/方便/快速


  •  凡是函数名中带有create\copy\new\retain等字眼, 都应该在不需要使用这个数据的时候进行release;
  •  GCD的数据类型在ARC环境下不需要再做release;
  •  CF(Core Foundation)的数据类型在ARC\MRC环境下都需要再做release;




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值