关于同一个类的不同catgroy中相同属性的调用问题
2016-03-03 本文已影响216人
2a0d699cb83d
今天突然被人遇到如此一个问题,假如有一个类,它有两个分类,分类中都有个叫test的属性,那么调用时,先调用谁的问题。
其实我的内心是这样的
![](https://img.haomeiwen.com/i626869/dc7df18ba088ba77.jpeg)
但无论怎么说买还是引起了我的好奇心,于是,我们动手写了个demo,工程看起来是这样的
![](https://img.haomeiwen.com/i626869/c14c6e5ba730f4f0.png)
ViewController有两个分类,他们的内部看起来是这样的
![](https://img.haomeiwen.com/i626869/b6375de833cc1fb0.png)
![](https://img.haomeiwen.com/i626869/974f8ab112ec58f3.png)
我们的ViewController开始调用
![](https://img.haomeiwen.com/i626869/fde32879c7afd9f6.png)
结果是这样的
![](https://img.haomeiwen.com/i626869/827face830cba36f.png)
并且有警告
![](https://img.haomeiwen.com/i626869/76a8777893bfbcfc.png)
看来编译器发现了我们有相同的属性,但其实警告的内容是发现了相同的实例方法,冲突了。
那如果,我们ViewController+aaaaa这个类删了呢,很显然
![](https://img.haomeiwen.com/i626869/8585e91d88215ca3.png)
综上,这可能和加载顺序有关,在编译完所有文件,并最后生成可执行文件时(执行文件是Mach-o格式),mach-o文件的头部,会有具体的加载信息,并且在编译时,不会再加载相同的属性,并发出警告。
![](https://img.haomeiwen.com/i626869/5fbcc0154fcc4b17.jpeg)