1.好处:a减少编译时间;b.避免循环引用(如果用#include的话);c.减少依赖关系容易做SDK,供第三方调用
2.正确的例子(原则就是能不在头文件引用,就不在头文件引用)
a..h文件先用@class声明,.m文件里面在引入
//
// AppDelegate.h
//
#import <UIKit/UIKit.h>
@classHuViewController;@interface AppDelegate : UIResponder <UIApplicationDelegate>@property (strong, nonatomic) UIWindow *window;@property (strong, nonatomic) HuViewController *viewController;
@end
//使用的地方
// AppDelegate.m
#import "HuViewController.h"
@interfaceAppDelegate ()
@end
@implementation AppDelegate
@end
b.如果需要引入协议,最好将协议单独放在一个头文件里(也便于复用)
// HsTradeGpzyDefine.h
@class HsGpzySelectContractPage;@protocol HsGpzySelectContractPageDelegate <NSObject>@optional- (void)tradeSelectContractPage:(HsGpzySelectContractPage *)page submitData:(id)data;
@end
//使用的地方
// HsGpzySelectContractPage.m
#import "HsTradeGpzyDefine.h"
@interfaceHsGpzySelectContractPage ()
@property(nonatomic, assign) id<HsGpzySelectContractPageDelegate> delegate;
@end
c.如果委托类型协议不能单独放在一个文件里(因为要和委托类放一起)
/// @文件名称 HsPickerView.h
@protocol HsPickerViewDelegate <NSObject>@optional-(void)onSelectResponse:(NSDictionary*)params;
@end
@interface HsPickerView : UIPickerView<UIPickerViewDelegate,UIPickerViewDataSource>
{}
@property(nonatomic, assign) id<HsPickerViewDelegate> backDelegate;
@end
//使用的地方
// HsTradeGpzyCoverDetailPage.m
@interfaceHsTradeGpzyCoverDetailPage ()<HsPickerViewDelegate>
@property(nonatomic, retain) HsPickerView *supplyStylePickerView;
@end
@implementation HsTradeGpzyCoverDetailPage
- (void) onSelectResponse:(NSDictionary*)params{
}
@end
如果你发现本文对你有所帮助,如果你认为其他人也可能受益,请把它分享出去