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;


以上...
顿觉得自己平时不够细心,出于自省的目的和满足好奇心后的欣喜,写此文留念..



 

posted @ 2018-07-13 00:36  weaker  阅读(332)  评论(0编辑  收藏  举报