iOS 避免循环导入及自定义控件delegate和protocol的相互引用的问题
在OC中一般来说ClassA同ClassB想要避免重复import的话两种方案
1. 若ClassA.h 头文件中已经导入了ClassB,即#import "ClassB.h" ,同时如果ClassB.h也想引用ClassA,可以通过在ClassB.h中 @class ClassA这样来避免循环导入的问题
2.若ClassA.h中已导入ClassB,那么在ClassB.m文件中,注意是ClassB的.m文件中执行 #import "ClassA.h",这也是不发生冲突的
上面介绍的是类和类之间避免循环导入的问题
记录一个之前没关注到的小知识点
平时写代理方法的话主要就是为调用外界某个方法,但是基本都没涉及过在代理方法中传入当前类本身的实例对象(大抵是简单的需求写多了之前没碰过这种场景😂)
譬如UIScrollView中的UIScrollDelegate相互引用:
代码块A:
@interface UIScrollView : UIView @property(nullable,nonatomic,weak) id<UIScrollViewDelegate> delegate; @end
代码块B:
@protocol UIScrollDelegate <NSObject> - (void)scrollViewDidScroll:(UIScrollView *)scrollView; @end
这时候关键点在于块A的UIScrollView中声明了一个遵循<UIScrollViewDelegate>的属性,开始引用UIScrollViewDelegate协议
紧接着声明的UIScrollViewDelegate协议中的 scrollViewDidScroll方法传入了scrollView对象,引用了UIScrollView类
为了解决涉及协议的相互引用,苹果提供了一个跟@class相同作用的@protocol修饰符,只要在声明
@interface UIScrollView : UIView
的代码行上方添加@protocol UIScrollDelegate;
以上...
顿觉得自己平时不够细心,出于自省的目的和满足好奇心后的欣喜,写此文留念..