ios - 为什么在 ModelController.h 中使用@class DataViewController?

标签 ios objective-c

<分区>

我已经创建了一个基于页面的应用程序。

@class DataViewController 在 ModelController.h 中意味着什么?为什么 ModelController.m 中的#import "DataViewController.h"不够用?

#import <UIKit/UIKit.h>

@class DataViewController;

@interface ModelController : NSObject <UIPageViewControllerDataSource>

- (DataViewController *)viewControllerAtIndex:(NSUInteger)index storyboard:(UIStoryboard *)storyboard;
- (NSUInteger)indexOfViewController:(DataViewController *)viewController;

@end

最佳答案

@class DataViewController;

是为了

-(DataViewController *)viewControllerAtIndex:(NSUInteger)index 
                                  storyboard:(UIStoryboard *)storyboard;

@class 是一个前向声明,它告诉编译器对这个旨在返回 DataViewController 对象的方法声明有点宽容,并将处理推迟到实现部分。
您最终将在 ModelController.m 中需要 #import "DataViewController.h"

好吧...您可以放置​​ #import "DataViewController.h" 但是...如果 DataViewController.h 本身有一个 #import "ModelController. h" 语句,然后编译器将进入循环导入循环。


至于:

Why #import "DataViewController.h" in ModelController.m is not enough ?

  1. 您在 ModelController.h 中公开声明方法 -viewControllerAtIndex:storyboard:
    • 这告诉导入 ModelController 的类它提供了这样一个方法。
  2. 此方法返回一个 DataViewController 对象并且由于存在 DataViewController.h 导入 ModelController.h 的可能性
    • 你需要 @class DataViewController;ModelController.h
  3. 由于@class只是一个前向声明,您需要在ModelController.m#import "DataViewController.h"

如果...该方法仅在 ModelController 类中使用,则您无需在 .h 中声明该方法,从而不再需要 @class DataViewController; 语句。


此外,我喜欢 @class vs. #import 上的这个通用 答案

关于ios - 为什么在 ModelController.h 中使用@class DataViewController?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23435546/

相关文章:

ios - 如何在 Swift 中连续录制音频并播放同一文件中的音频?

javascript - App.js 不更新 iOS 模拟器中的修改代码

ios - 检查是否有效的 url WebView Swift

iphone - iPhone SDK 中的文本域输入验证

ios - 知道所有 SKActions 何时完成或没有任何运行

ios - Xcode 链接器错误 : File not found

objective-c - 使用带有 Storyboard的 instantiateViewControllerWithIdentifier 传递属性值

ios - CCLabelTTF 如何改变字符串的颜色

ios - 如何在 iOS 的 Google Map SDK 中添加搜索功能?

objective-c - iPhone 应用程序在某些设备上崩溃 :(