如何使用两个#导入



我正在制作一个应用程序,当用户按下主页按钮时,视图控制器需要关闭UIAlertView。因此,我需要通过应用程序代理来完成此操作。这个视图控制器的类还需要应用程序委托来做许多其他事情,所以我在它的头文件中有一个#import。到目前为止,我一直在应用程序委托中使用@class进行其他操作,但现在我需要一个#import,以便在视图控制器上调用适当的方法。如何避免#import循环?还有别的办法吗?

谢谢。

除非您确实需要在头中使用完整的定义,否则请在.h文件中使用@class,在实际调用方法的.m文件中使用#import

真正需要在头文件中使用#import的唯一时间是,导入的头定义了您的超类。

我假设您关注循环的原因是因为您的应用程序代理对您的控制器了解很多,而您的控制器现在需要在应用程序代理上调用一些方法。我不喜欢有一个繁重的应用程序委托,所以我倾向于尽可能多地卸载到服务和实用程序类上。如果应用程序委托绝对必须做一些事情,那么创建一个单例服务类,并让应用程序委托将自己设置为该服务的委托(当然是通过协议)。现在,您的控制器可以调用此服务来执行通常需要您调用应用程序代理的操作。

还要记住,您可以使用通知中心来监听应用程序代理中的许多事件:

[[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(applicationDidEnterBackground:)
                                                 name:UIApplicationDidEnterBackgroundNotification
                                               object:nil]; 

因此,您可能根本不需要与应用程序代表交谈。

为了避免#import循环,您必须遵循以下示例

假设你有两个文件,如下

ABC.hABC.m&XYZ.hXYZ.m

现在,只需将#import XYZ.h放在ABC.h 的顶部,就可以在"ABC.h"中导入"XYZ.h"

但是,如果要在"XYZ.h"中导入"ABC.h",则不能使用"#import"导入。这将创建循环。

为了避免这种情况,请输入@class ABC;在"XYZ.h"中的@interface XYX正上方,然后在"XYxy.m"中放入"#import ABC.h"

这将像符咒一样工作:)

#import将防止多重包含。所以不用担心。在理想的情况下,只要遵循惯例,你就会在头文件中使用@class,在实现文件中导入所需的类。

最新更新