将'ZXingObjC'(QR码库)非ARC转换为ARC,存在一些问题

时间:2013-06-01 14:24:42

标签: objective-c memory automatic-ref-counting qr-code retain

我之前从未使用过非ARC,我尝试过ZXingObjC示例项目(QR Code Scanner),它是非ARC项目以及库。 我开始删除autorealese,dealloc等。 但我遇到'保留',我还不知道如何处理它。 我很高兴能有一只手,因为它会让很多人受益。

“保留”声明的示例:

if (zxd) {
    input =
      [ZXCaptureDeviceInput deviceInputWithDevice:zxd
                                       ZXAV(error:nil)];
    [input retain];
  }

另一个人:

- (void)setCaptureDevice:(ZXCaptureDevice *)device {
  if (device == capture_device) {
    return;
  }

  if(capture_device) {
    ZXQT({
      if ([capture_device isOpen]) {
        [capture_device close];
      }});
    [capture_device release];
  }

  capture_device = [device retain];
}

修改 好的,我一直在努力制作“EDIT - > Refactor - >转换为Objective-C ARC”,我得到: enter image description here

2 个答案:

答案 0 :(得分:2)

使用“ZXingOjbC”而不将其转换为arc projcet的另一种方法:

我在编译它的源代码时通过关闭arc来使用库,在同一项目中组合弧和非弧代码时它可以正常工作。

使用以下步骤:

  1. 将“ZXingObjC”源文件夹放入您的项目
  2. 转到项目 - >构建阶段
  3. 选择所有ZXingObjc文件(您可以按shift键一次选择所有文件),然后按Enter键。
  4. 键“-fno-objc-arc”告诉编译器在没有弧的情况下编译这些源代码。

答案 1 :(得分:0)

好的,我做的是:

  1. 清除所有非ARC旧代码。
  2. “编辑 - >重构 - >转换为Objective-C ARC”。
  3. 添加了缺少的AudioToolbox.Framework
  4. 项目现在完全适用于ARC。 我稍后会上传到github。