objective c设计模式--通知中心

本文详细介绍了如何使用Objective-C的NSNotificationCenter实现消息中心,包括创建通知中心、发送和接收消息的过程,通过广播电台与听众的例子直观展示了消息中心的工作原理。
通知中心
通知中心就是让任意一个消息的发送者可以将消息发送给任意一个消息的接收者。
创建通知中心:
通知中心是个单例,NSNotificationCenter*center = [NSNotificationCenter defaultCenter];
通知中心要发送消息,消息也是对象,消息的类型:

@interfaceNSNotification :NSObject<NSCopying,NSCoding]] > - (NSString*)name; 

- (id)object; - (NSDictionary*)userInfo; @end

发送消息:

- (void)postNotification:(NSNotification*)notification; 

- (void)postNotificationName:(NSString*)aName object:(id)anObject;

- (void)postNotificationName:(NSString*)aName object:(id)anObject userInfo:(NSDictionary*)aUserInfo;
 a, postNotificationName,推送消息的名称,匹配在注册消息监听者时的消息名称。
 b, object, 发送消息的实例
 c, userInfo,发送消息时附带的消息上下文,此实例为一个字典实例 
接受消息:
- (void)addObserver:(id)observer selector:(SEL)aSelector name:(NSString*)aName object:(id)anObject;
a,addObserver,添加监听者实例,此处为当前实例

 b, selector,observer中的一个方法指针,当有消息的时候会执行此方法,并把相关上下文以参数传递过去
 c, name,注册所关心消息的名称,
 d, object,这个是对消息发送方的一个过滤,此参数据说明当前监听器仅对某个对象发出的消息感兴趣。

下面有一份实例:下面有一份实例:用广播电台与听众举个例子,听众需要先调好频道(好比用(void)addObserver:(id)observer selector:(SEL)aSelector name:(NSString *)aName object:(id)anObject;方法在消息中心注册一样),然后广播电台发送消息(好比消息中心调用- (void)postNotificationName:(NSString *)aName object:(id)anObject userInfo:(NSDictionary *)aUserInfo;方法一样),可以通过(SEL)aSelector方法执行想要的操作。


BJBroadCast.h

#import<Foundation/Foundation.h>

@interfaceBJBroadCast :NSObject 

- (void) boardcast; -(void) boardcastLooper;

@end


BJBroadCast.m

#import"BJBroadCast.h"

@implementationBJBroadCast 

-(void) boardcastLooper {      [NSTimerscheduledTimerWithTimeInterval:1.0ftarget:selfselector:@selector(boardcast)userInfo:nilrepeats:YES];    //启动一个定时器循环发送广播

- (void) boardcast {    //1.取得通知中心,是个单例     

   NSNotificationCenter*center = [NSNotificationCenterdefaultCenter];    //消息的内容

   staticint  i ;

    NSString*count = [NSStringstringWithFormat:@"boardcast %d",i++];

    NSDictionary*dict = [NSDictionarydictionaryWithObjectsAndKeys:@"boardcast",@"Name",count,@"Value",nil];    //2.发送广播         [centerpostNotificationName:@"BJboardcast"object:selfuserInfo:dict];

 }

@end


listener.h

#import<Foundation/Foundation.h>

@interfacelistener :NSObject 

-(void) wanttolisten; 

@end

listener.m

#import"listener.h"

@implementationlistener 

-(void) wanttolisten {    //1.要先注册     [[NSNotificationCenterdefaultCenter]addObserver:selfselector:@selector(recieveBoardcast:)name:@"BJboardcast"object:nil];    //第一个、第二个参数表示只要有@"BJboardcast"这个广播,就调用[self recieveBoardcast:];第四个参数一般都设为nil    // 2.接受广播数据        } 

- (void) recieveBoardcast:(NSNotification*)notify {    //notify就是具体的广播的消息

   NSString*name = notify.name;

    NSLog(@"notify is %@",notify);

 }

@end


main.m

#import<Foundation/Foundation.h>

#import"BJBroadCast.h" 

#import"listener.h"

int main () {

    @autoreleasepool{

        listener*l1 = [[listeneralloc]init];

         [l1wanttolisten];

        listener*l2 = [[listeneralloc]init];

         [l2wanttolisten];

        BJBroadCast*cast = [[BJBroadCastalloc]init];

         [castboardcastLooper];        //要先创建收听者,再创建波段频道,否则,就需要使用boardcastLooper方法。         [[NSRunLoopcurrentRunLoop]run];

    } 

       return0;

 }

内容概要:本文档围绕六自由度机械臂的ANN人工神经网络设计展开,涵盖正向与逆向运动学求解、正向动力学控制,并采用拉格朗日-欧拉法推导逆向动力学方程,所有内容均通过Matlab代码实现。同时结合RRT路径规划与B样条优化技术,提升机械臂运动轨迹的合理性与平滑性。文中还涉及多种先进算法与仿真技术的应用,如状态估计中的UKF、AUKF、EKF等滤波方法,以及PINN、INN、CNN-LSTM等神经网络模型在工程问题中的建模与求解,展示了Matlab在机器人控制、智能算法与系统仿真中的强大能力。; 适合人群:具备一定Ma六自由度机械臂ANN人工神经网络设计:正向逆向运动学求解、正向动力学控制、拉格朗日-欧拉法推导逆向动力学方程(Matlab代码实现)tlab编程基础,从事机器人控制、自动化、智能制造、人工智能等相关领域的科研人员及研究生;熟悉运动学、动力学建模或对神经网络在控制系统中应用感兴趣的工程技术人员。; 使用场景及目标:①实现六自由度机械臂的精确运动学与动力学建模;②利用人工神经网络解决传统解析方法难以处理的非线性控制问题;③结合路径规划与轨迹优化提升机械臂作业效率;④掌握基于Matlab的状态估计、数据融合与智能算法仿真方法; 阅读建议:建议结合提供的Matlab代码进行实践操作,重点理解运动学建模与神经网络控制的设计流程,关注算法实现细节与仿真结果分析,同时参考文中提及的多种优化与估计方法拓展研究思路。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值