ios - 在我的简单案例中,#import 和 @class 之间的区别
<p><p>在我的 Controller 的头文件中,我需要声明另一个 Controller 的实例。我是通过以下方式做到的:</p>
<pre><code>#import "BIDMyRootController.h"
#import "BIDAnotherController.h" //I import another controller's header
@interface BIDCurrentController : BIDMyRootController
//I declare an instance of another controller
@property (strong, nonatomic) BIDAnotherController *anotherController;
@end
</code></pre>
<p>上面的代码非常简单。没问题! </p>
<p>但我也注意到,或者,我可以使用 <code>@class</code> 以下列方式替换 <code>BIDAnotherController</code> 的 <code>#import</code> 语句: </p>
<pre><code>#import "BIDMyRootController.h"
@class BIDAnotherController //I declare another controller with @class tag
@interface BIDCurrentController : BIDMyRootController
//I declare an instance of another controller
@property (strong, nonatomic) BIDAnotherController *anotherController;
@end
</code></pre>
<p>也没问题! </p>
<p>但是我现在很困惑,<code>#import "BIDAnotherController.h"</code> 和 <code>@class BIDAnotherController</code> 有什么区别,那么如果它们都ok???</code> p>
<hr/>
<p><strong>更新:</strong></p>
<p>对了,在<code>BIDCurrentController</code>的实现文件中,我又导入了<code>BIDAnotherController</code>:</p>
<pre><code>#import "BIDCurrentController.h"
#import "BIDAnotherController.h" //import another controller again
@implementation BIDCurrentController
...
@end
</code></pre></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><ul>
<li><p>使用 <code>@class BIDAnotherController</code> 被称为 <code>BIDAnotherController</code> 的前向声明,它基本上告诉编译器它的实现将在未来的某个时候存在. </p></li>
<li><p><code>#import "BIDAnotherController.h"</code> 实际上是将<code>BIDAnotherController.h</code> 的内容包含到当前文件中。</p></li>
</ul>
<p>如果您只需要使用 <code>BIDAnotherController</code> 作为方法的属性或参数,则可以避免使用前向声明,因为您的代码不需要知道它存在的任何信息.如果您需要使用 <code>BIDAnotherController</code> 的属性或方法,则需要导入其 header (否则编译器甚至不会知道这些属性或方法存在!)。</p>
<p>通常使用前向声明来中断两个或多个头文件之间的包含循环。防止循环的最简单方法是首选 <code>@class</code> 声明,除非您确实需要访问类的属性或方法。</p></p>
<p style="font-size: 20px;">关于ios - 在我的简单案例中,#import 和 @class 之间的区别,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/16320407/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/16320407/
</a>
</p>
页:
[1]