iOS中extern的用法
2020-04-30 本文已影响0人
tp夕阳武士
这是一个比较普通的知识点,但是还是做个笔记记起来;
1.在发送通知的控制器的.h文件中声明XXVCLoginSuccessNotification 登录成功的通知名称
#import <UIKit/UIKit.h>
extern NSString *const XXVCLoginSuccessNotification;
@interface XXLovinVC : UIViewController
@end
2.在发送通知的控制器的.m文件中定义其值
#import "XXLovinVC.h"
NSString *const XXVCLoginSuccessNotification = @"XXVCLoginSuccessNotification";
@interface XXLovinVC ()
@end
@implementation XXLovinVC
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor yellowColor];
//发送登录成功的通知
[[NSNotificationCenter defaultCenter] postNotificationName:XXVCLoginSuccessNotification object:nil];
[self.navigationController popViewControllerAnimated:YES];
}
3.在另一个页面注册通知的.m文件中直接调用(这里有个条件,就是导入了XXLovinVC头文件的条件)
#import "ViewController.h"
#import "XXLovinVC.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(loginSucess) name:XXVCLoginSuccessNotification object:nil];
}
4.如果在一个没有导入声明XXVCLoginSuccessNotification的文件中使用,则会报错,如下图。

5.如何解决?需要在此文件的.h或者.m文件中,再次声明
#import "AppDelegate.h"
extern NSString *const XXVCLoginSuccessNotification;
@interface AppDelegate ()
@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(loginSucess) name:XXVCLoginSuccessNotification object:nil];
return YES;
}
不过看SDWebImage中对SDWebImageDownloadStartNotification的处理是都放在了.h文件中了。

注意: 声明的常量名字首字母需要大写.
文章抄自:落夏简叶的_iOS中extern的用法.