博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Xcode6编译SDWebImage报错解决方法(SDWebImageDownloaderOperation.m错误)
阅读量:5217 次
发布时间:2019-06-14

本文共 1562 字,大约阅读时间需要 5 分钟。

报错:

    Use of undeclared identifier '_executing';

    Use of undeclared identifier '_finished';

 

解决方法:

在SDWebImageDownloaderOperation类的实现中(@implementation SDWebImageDownloaderOperation{...}下面)添加:

  1. @synthesize executing = _executing ;  
  2. @synthesize finished = _finished;  

 

 

即可。

 

 

 

问题原因(2014.11.29日补充):=================================================================

 

(以下内容费时费力,转载注明)

看到很多人问这个问题的原因,那就在这里给大家说一说好了,分析思路一并送上(不过我还是建议大家自己动手去分析)。

首先,如果新建工程,按照SDWebImage的方式声明输出口并引用:

 

 

    @interface ZCTest ()

    @property (assign, nonatomic, getter = isExecuting) BOOL executing;

    @property (assign, nonatomic, getter = isFinished) BOOL finished;

    @end

 

    @implementation ZCTest

    - (id)init

    {

        if ((self = [super init]))

        {

            _executing = NO;

            _finished = NO;

        }

        return self;

    }

    @end

这段代码不会出现任何问题,并可以编译正常。

那么,为什么同样的代码在SDWebImage里却有如下提示?

    Use of undeclared identifier '_executing';

    Use of undeclared identifier '_finished';

思路就是去找SDWebImage的SDWebImageDownloaderOperation类和自己的代码有什么不同。很容易发现,SDWebImageDownloaderOperation继承的父类是NSOperation,那么,把我们自己的测试代码也继承自NSOperation,你会发现测试代码这时会报同样的错误了。好了,原因定位在NSOperation,看看这个接口吧,打开NSOperation.h,在声明中会发现如下两行:

    @property (readonly, getter=isExecuting) BOOL executing;

    @property (readonly, getter=isFinished) BOOL finished;

 

好了,问题就出在这里。NSOperation里声明了两个同名属性,并且是readonly,所以在SDWebImageDownloaderOperation里使用_executing = NO修改就会提示错误了,而在SDWebImageDownloaderOperation的扩展中使用assign优先级是低于继承的(猜测)。这就是问题的由来。

 

至于老版本的xcode为什么不报错,这可能要归结到xcode本身了,或许老版本声明readonly模式同样会产生_executing,但是xcode6在readonly模式时优化掉了_executing变量,有兴趣可以自行试验或者看编译过程文件。这里就不继续解读了。

 

转载于:https://www.cnblogs.com/panyangjun/p/4461283.html

你可能感兴趣的文章
解决DataSnap支持的Tcp长连接数受限的两种方法
查看>>
Synchronous/Asynchronous:任务的同步异步,以及asynchronous callback异步回调
查看>>
ASP.NET MVC5 高级编程-学习日记-第二章 控制器
查看>>
Hibernate中inverse="true"的理解
查看>>
高级滤波
查看>>
使用arcpy添加grb2数据到镶嵌数据集中
查看>>
[转载] MySQL的四种事务隔离级别
查看>>
QT文件读写
查看>>
C语言小项目-火车票订票系统
查看>>
15.210控制台故障分析(解决问题的思路)
查看>>
BS调用本地应用程序的步骤
查看>>
常用到的多种锁(随时可能修改)
查看>>
用UL标签+CSS实现的柱状图
查看>>
mfc Edit控件属性
查看>>
Linq使用Join/在Razor中两次反射取属性值
查看>>
[Linux]PHP-FPM与NGINX的两种通讯方式
查看>>
Java实现二分查找
查看>>
优秀员工一定要升职吗
查看>>
[LintCode] 462 Total Occurrence of Target
查看>>
springboot---redis缓存的使用
查看>>