zl程序教程

您现在的位置是:首页 >  其它

当前栏目

简化通知中心的使用

中心 通知 简化 使用
2023-09-14 08:57:15 时间
///////////////////////////////////////////////////////////////////////////////////////////
@property (nonatomic, readonly, strong) NSString *name; @property (nonatomic, readonly, weak) id observer;
/////////////////////////////////////////////////////////////////////////////////////////// * 创建通知对象 * @param flag 标签 * @param data 传递的数据 * @return 通知对象 static inline PostObject * POST_OBJECT(NSString *flag, id data) { return [PostObject postObjectWithFlag:flag data:data]; * 处理通知的对象 * @param sender 接收的通知对象 * @return 通知对象 static inline PostObject * ACCESS_POST_OBJECT(id sender) { return [PostObject accessNotificationCenterObject:sender]; * 发送通知消息 * @param name 指定的标签 * @param postObject 通知的对象 static inline void POST_MSG_TO(NSString *name, PostObject *postObject) { [NotificationCenterObject postToRegisterName:name data:postObject]; * 注册通知中心 * @param name 指定的标签 * @param observer 被注册的对象 * @param selector 执行的句柄 * @return 实例对象 static inline NotificationCenterObject * REGISTER_MSG_CENTER_WITH(NSString *name, id observer, SEL selector) { return [NotificationCenterObject withObserver:observer registerName:name selector:selector]; }

//

// NotificationCenterObject.m

// NotificationCenter

// Created by YouXianMing on 15/7/15.

// Copyright (c) 2015年 YouXianMing. All rights reserved.

#import "NotificationCenterObject.h"

@implementation PostObject

+ (instancetype)postObjectWithFlag:(NSString *)flag data:(id)data {

 PostObject *postObject = [PostObject new];

 postObject.flag = flag;

 postObject.data = data;

 return postObject;

+ (instancetype)accessNotificationCenterObject:(id)sender {

 PostObject *postData = nil;

 if ([sender isKindOfClass:[NSNotification class]]) {

 NSNotification *notiData = sender;

 if ([notiData.object isKindOfClass:[PostObject class]]) {

 postData = notiData.object;

 return postData;

@interface NotificationCenterObject ()

@property (nonatomic, strong) NSString *name;

@property (nonatomic, weak) id observer;

@property (nonatomic) SEL observerSelector;

@property (nonatomic) BOOL haveAddObserver;

@implementation NotificationCenterObject

+ (void)postToRegisterName:(NSString *)name data:(PostObject *)postData {

 [[NSNotificationCenter defaultCenter] postNotificationName:name object:postData];

+ (instancetype)withObserver:(id)observer registerName:(NSString *)name selector:(SEL)selector {

 NotificationCenterObject *notificationCenterObject = [NotificationCenterObject new];

 notificationCenterObject.name = name;

 notificationCenterObject.observer = observer;

 notificationCenterObject.observerSelector = selector;

 notificationCenterObject.haveAddObserver = YES;

 [[NSNotificationCenter defaultCenter] addObserver:observer selector:selector name:name object:nil];

 return notificationCenterObject;

- (void)remove {

 if (self.haveAddObserver == YES _name _observer) {

 self.haveAddObserver = NO;

 [[NSNotificationCenter defaultCenter] removeObserver:_observer name:_name object:nil];

- (void)reAdd {

 if (self.haveAddObserver == NO _name _observer) {

 self.haveAddObserver = YES;

 [[NSNotificationCenter defaultCenter] addObserver:_observer selector:_observerSelector name:_name object:nil];

- (void)dealloc {

 if (self.haveAddObserver == YES) {

 NSLog(@"已经释放");

 [[NSNotificationCenter defaultCenter] removeObserver:_observer name:_name object:nil];

@end

细节

用内联函数将OC风格函数简化为C风格函数,能够稍微缩短代码编写长度,其实并无实用价值,装的成分居多。



微信小程序模板消息接口下线了,不用慌,调用统一服务消息接口来实现相同功能 做过微信开发的应该都有一点感触,就是他的开发文档不是一成不变的,接口有时候会被下线,但也不是一下子就不能用了,一般会兼容旧接口,然后提醒你使用新接口有更多好处。如果接口真的直接下线了,也会提供另一种能够实现相同功能的接口给你替换。所以有天你以为代码都写好了,没有bug了,悠哉悠哉的时候,忽然产品经理说微信的哪个接口不能用了,快去改一下,不要惊讶,老老实实去改就对了哈。