Objective c Obj-C:从何处#导入协议头文件

Objective c Obj-C:从何处#导入协议头文件,objective-c,ios,import,header,protocols,Objective C,Ios,Import,Header,Protocols,在iOS应用程序中,我正在定义自己的协议,以便在自定义视图控制器中使用委托模式。哪些文件应该导入哪些其他文件?换句话说,我的案件涉及四个文件: MainViewController.h:声明协议和视图控制器,然后执行协议 MainViewController.m:实现协议方法 SecondaryViewController.h:声明类型为id的委托实例变量和属性(带有协议的前向声明) SecondaryViewController.m:在代理上使用协议方法 哪些文件应该导入哪些其他文件?我认

在iOS应用程序中,我正在定义自己的协议,以便在自定义视图控制器中使用委托模式。哪些文件应该导入哪些其他文件?换句话说,我的案件涉及四个文件:

  • MainViewController.h
    :声明协议和视图控制器,然后执行协议
  • MainViewController.m
    :实现协议方法
  • SecondaryViewController.h
    :声明类型为
    id
    的委托实例变量和属性(带有
    协议的前向声明)
  • SecondaryViewController.m
    :在代理上使用协议方法

哪些文件应该导入哪些其他文件?我认为第二个视图控制器的标题中的转发声明就足够了,但是,除非第二个标头或实现导入主标头,否则我会收到编译警告/错误。

SecondaryViewController.m
应该
导入“MainViewController.h
SecondaryViewController.m应该在使用协议方法时导入标头。

让我们说一下具有一些委托的PrimaryViewController响应的方法。然后,次视图控制器应实现其委托以使用它。委托方法在PrmaryViewController中声明,并在其委托类(此处为SecondaryViewController)中定义 在主视图控制器中,您只需将委托声明为

@protocol PrimaryDelegate
@interface PrimaryViewController : NSObject
   <id>PrimaryDelegate;
@end
@protocol PrimaryDelegate
   -(void)secondaryViewControllerWantsToCallThisDelegate;
@end
在“实施”部分中,将代理分配给self as

 primary.delegate = self;
并将primarydelegate中描述的方法定义到次要视图控制器中

-(void)secondaryViewControllerWantsToCallThisDelegate{
//some method definition here
}

这是向后看的。MainViewController定义一个协议然后实现它是没有意义的。协议的要点是定义其他人要实现的方法。例如,查看Xcode 4.2实用程序应用程序项目模板:

// [FlipsideViewController.h]
@protocol FlipsideViewControllerDelegate
- (void)flipsideViewControllerDidFinish:(FlipsideViewController *)controller;
@end
@interface FlipsideViewController : UIViewController
@property (weak, nonatomic) IBOutlet id <FlipsideViewControllerDelegate> delegate;
@end

// [MainViewController.h]
#import "FlipsideViewController.h" // so that it can see the protocol definition
@interface MainViewController : UIViewController <FlipsideViewControllerDelegate>
@end
/[FlipsideViewController.h]
@协议FlipsideViewControllerDelegate
-(void)FlipSideViewControllerdFinish:(FlipsideViewController*)控制器;
@结束
@界面FlipsideViewController:UIViewController
@属性(弱、非原子)IBID委托;
@结束
//[MainViewController.h]
#导入“FlipsideViewController.h”//以便查看协议定义
@接口MainViewController:UIViewController
@结束
结果是MainViewController可以实例化FlipsideViewController并将其自身设置为FlipsideViewController的
委托。现在FlipsideViewController可以使用FlipsideViewControllerDelegate方法通过其
委托
属性与MainViewController进行对话,同时对其真实类保持不可知状态

// [FlipsideViewController.h]
@protocol FlipsideViewControllerDelegate
- (void)flipsideViewControllerDidFinish:(FlipsideViewController *)controller;
@end
@interface FlipsideViewController : UIViewController
@property (weak, nonatomic) IBOutlet id <FlipsideViewControllerDelegate> delegate;
@end

// [MainViewController.h]
#import "FlipsideViewController.h" // so that it can see the protocol definition
@interface MainViewController : UIViewController <FlipsideViewControllerDelegate>
@end