当前位置: 首页 > 编程笔记 >

IOS 代理方式实现实例详解

廉飞捷
2023-03-14
本文向大家介绍IOS 代理方式实现实例详解,包括了IOS 代理方式实现实例详解的使用技巧和注意事项,需要的朋友参考一下

IOS 代理方式实现

在客户端开发中,经常用到通知、代理、block来实现各个页面之间关联。通知,以一直“盲”的方式实现传递。 代理、block
可以很明确的知道各个界面之间的关联关系。以代理为例,一般的做法如下 :

DesViewController *des = [[DesViewController alloc] init];des.delegate = self;[self.navigationController pushViewController:des animated:YES];

这种情况下,一般两个界面是有一定的关系的,例如:从A界面跳转到B界面或者a的视图是A控制器之间一部分。但是,如果没有联系的怎么处理呢,例如: A界面需要根据用户登录状态来展示不同的数据,或者展示不同的界面情况:

实战:

思路: 创建一个管理类类处理,设置好对应的代理方法,然后再需要的时候,添加 或者 删除对应的代理方法即可。

核心代码:

.h文件

//// RSLoginService.h// iOSDelegate//// Created by admin on 2016/11/6.// Copyright © 2016年 Reading. All rights reserved.
//#import <Foundation/Foundation.h>@protocol UserLoginStatusDelegate <NSObject>
- (void)userDidLoginIn;
- (void)userWillLoginOut;
@end@interface RSLoginService : NSObject+ (instancetype)sharedInstance;
@property (nonatomic, strong) NSMutableSet *delegates;
- (void)onWillLoginOut;
- (void)onDidLoginIn;
- (void)addDelegate:(id<UserLoginStatusDelegate>) delegate;
- (void)removeDelegate:(id<UserLoginStatusDelegate>) delegate;@end

.m文件

//// RSLoginService.m// iOSDelegate//// Created by admin on 2016/11/6.

// Copyright © 2016年 Reading. All rights reserved.

//#import "RSLoginService.h"@implementation 

RSLoginService+ (instancetype)sharedInstance{  static id instance;  static dispatch_once_t onceToken;  dispatch_once(&onceToken, ^{ 
   instance = [[RSLoginService alloc] init];  });  return instance;}- (void)onWillLoginOut{  

// do something you need to do before Login out 
 [self.delegates makeObjectsPerformSelector:@selector(userWillLoginOut)];}- (void)onDidLoginIn{  

 // do something you need to do after Login In  
 [self.delegates makeObjectsPerformSelector:@selector(userDidLoginIn)];}- 
(void)addDelegate:(id<UserLoginStatusDelegate>) delegate{  if (![self.delegates containsObject:delegate]) 
{    [self.delegates addObject:delegate];  }
}- (void)removeDelegate:(id<UserLoginStatusDelegate>) 
delegate{  if (![self.delegates containsObject:delegate]) { 
    [self.delegates removeObject:delegate];  }}- (NSMutableSet *)delegates{  if (!_delegates) {    _delegates = [NSMutableSet set];  }  return _delegates;}@end

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

 类似资料:
  • 本文向大家介绍ios弹幕高效加载实现方式实例代码,包括了ios弹幕高效加载实现方式实例代码的使用技巧和注意事项,需要的朋友参考一下 看直播的童鞋们应该会经常看到满屏幕的滚动弹幕,看到密密麻麻的弹幕第一印象就是怎么样高效加载来避免卡顿,弹幕组成部分包含用户头像、用户昵称、弹幕的内容、表情等,本文介绍的实现原理就是把这几部分绘制成一张图片,然后通过定时器移动弹幕图片,当图片不在屏幕范围内即销毁。 先看

  • 本文向大家介绍详解使用Java原生代理实现AOP实例,包括了详解使用Java原生代理实现AOP实例的使用技巧和注意事项,需要的朋友参考一下 一说到AOP,大家一定会想到spring,因为这东西实在是太强大了.但是大家一定要清楚,AOP是一只编程思想,而Spring仅仅是AOP的一种实现罢了. 首先百度下: 在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切

  • 本文向大家介绍详解iOS 计步器的几种实现方式,包括了详解iOS 计步器的几种实现方式的使用技巧和注意事项,需要的朋友参考一下 这篇文章介绍两种可以获取计步数据的方法,一种是采用CMPedometer获取手机计步器数据,另一种是采用HealthKit框架从手机健康App中获取计步数据。另外玩了一下写入数据到健康App。有描述不当之处,望指点。 花絮(用HealthKit框架构建app,写入数据到苹

  • 本文向大家介绍Java中的代理模式详解及实例代码,包括了Java中的代理模式详解及实例代码的使用技巧和注意事项,需要的朋友参考一下 java 代理模式详解 前言: 在某些情况下,一个客户不想或者不能直接引用一个对象,此时可以通过一个称之为“代理”的第三者来实现间接引用。代理对象可以在客户端和目标对象之间起到 中介的作用,并且可以通过代理对象去掉客户不能看到 的内容和服务或者添加客户需要的额外服务。

  • 本文向大家介绍JavaScript代理模式原理与用法实例详解,包括了JavaScript代理模式原理与用法实例详解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JavaScript代理模式原理与用法。分享给大家供大家参考,具体如下: 代理模式的定义,代理是一个对象(proxy)用它来控制目标对象的访问。为此他要是先与目标对象相同的接口,但是他不同于装饰者模式,它对目标对象不进行任何修改,

  • 本文向大家介绍Python设计模式之代理模式实例详解,包括了Python设计模式之代理模式实例详解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python设计模式之代理模式。分享给大家供大家参考,具体如下: 代理模式(Proxy Pattern):为其他对象提供一种代理以控制对这个对象的访问 运行结果: jiaojiao 送你洋娃娃 jiaojiao 送你花 jiaojiao 送你巧克