美文网首页
iOS中extern的用法

iOS中extern的用法

作者: tp夕阳武士 | 来源:发表于2020-04-30 11:23 被阅读0次

这是一个比较普通的知识点,但是还是做个笔记记起来;

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的文件中使用,则会报错,如下图。

1675043-b440470aca788e4e.png

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文件中了。 SDWebImage.jpg

注意: 声明的常量名字首字母需要大写.

文章抄自:落夏简叶的_iOS中extern的用法.

相关文章

网友评论

      本文标题:iOS中extern的用法

      本文链接:https://www.haomeiwen.com/subject/fyczwhtx.html