iOS开发,通知应该怎么写比较规范?当然怎么写都行,但是规范的代码会使得代码维护更简单。
学校通知放假的通知
1、初级的通知:直接在头文件中写上通知名
#import <Foundation/Foundation.h>
//小学给小学生发的放假通知
static NSString *const schoolHolidayNotification = @"schoolHolidayNotification";
@interface School : NSObject
@end
[[NSNotificationCenter defaultCenter] postNotificationName:schoolHolidayNotification object:nil];
2、中级的通知:在源文件中定义,在源文件中用extern关键提供类外使用
#import "MiddleSchool.h"
NSString * const MiddleSchoolHolidayNotification = @"MiddleSchoolHolidayNotification";
@implementation MiddleSchool
@end
#import <Foundation/Foundation.h>
//中学给高中生发的放假通知
extern NSString * const MiddleSchoolHolidayNotification;
@interface MiddleSchool : NSObject
@end
[[NSNotificationCenter defaultCenter] postNotificationName:MiddleSchoolHolidayNotification object:nil];
3、稍微高级的通知:在2的基础上,规范了通知名的书写,类名+助动词+通知内容+Notification
#import "Univercity.h"
NSString * const UnivercityWillHolidayNotification = @"UnivercityWillHolidayNotification";
@implementation Univercity
@end
#import <Foundation/Foundation.h>
//大学给大学生发的放假通知
extern NSString * const UnivercityWillHolidayNotification;
@interface Univercity : NSObject
@end
通知的规划化
1、如果是需要类外使用,在类内部定义,然后在类的外部用extern关键在修饰,提供外部使用。
2、通知命名一般是:类名+助动词[ will | did ]+通知名+Notification
例如
NSApplicationDidBecomeActiveNotification
NSTextViewDidChangeSelectionNotification
系统的通知
1、UITextField的通知:
2、关于UIKIT_EXTERN
3、关于NSNotificationName
这样看来NSNotificationName就是个字符串,其实就是NSSTring *,用这个字符串明确表明这是一个通知。
看官方文档中以下两种写法,都是一样的:
//第一种写法,用NSNotificationName
UIKIT_EXTERN NSNotificationName const UITextFieldTextDidBeginEditingNotification;
UIKIT_EXTERN NSNotificationName const UITextFieldTextDidEndEditingNotification;
UIKIT_EXTERN NSNotificationName const UITextFieldTextDidChangeNotification;
//第二种写法,直接用NSString *
UIKIT_EXTERN NSString *const UITextFieldDidEndEditingReasonKey NS_AVAILABLE_IOS(10_0);
总结
最后,我们推荐和官方写法保持一致,简洁又明了,代码风格统一。
写法一
这种需要有UIKit的头文件,因为UIKIT_EXTERN实在UIKit里面定义的
//源文件定义
NSNotificationName const UnivercityWillHolidayNotification = @"UnivercityWillHolidayNotification";
//头文件说明
UIKIT_EXTERN NSNotificationName const UnivercityWillHolidayNotification;
写法二
//源文件定义
NSString * const UnivercityWillHolidayNotification = @"UnivercityWillHolidayNotification";
//头文件说明
extern NSString * const UnivercityWillHolidayNotification;
结论:在引入了UIKit头文件的,用写法一;若是取不到宏UIKIT_EXTERN,就用写法二吧。看个人喜好。