当前位置:首页 > CN2资讯 > 正文内容

代理---代理---代理(这也把问题说清楚了,不过某些命名不是很规范)代理商关心的问题

2天前CN2资讯


转载请注明出处

作者:小马


代理和协议的语法这里不赘述,自己查资料。

 

这个demo的思路是这样的,有一个A类,这个类不是一个基于视图类,它继承自NSObject,这个类会启动一个定时器,当定时器触发时,它会触发B视图弹出一个alert提醒。因为A类没法直接操作B视图,所以它用委托机制,“委托”B视图来操作。

 

新建一个view的工程,名为DelegateDemo,默认生成的这个视图就是我们的B视图。然后新建一个timeControl类,作为我们的A类。

 

A类的头文件先要定义一个协议,这个我们的代理要遵循的协议,然后应该还有一个公共的方法,用来启动定时器,代码如下:

 

[objc] 1. #import <Foundation/Foundation.h> 2. 3. 4. //协议定义 5. @protocol UpdateAlertDelegate <NSObject> 6. - (void)updateAlert; 7. @end 8. 9. 10. @interface TimerControl : NSObject 11. //遵循协议的一个代理变量定义 12. @property (nonatomic, weak) id<UpdateAlertDelegate> delegate; 13. 14. - (void) startTheTimer; 15. 16. @end


然后我们看看A类的实现文件,非常简单,启动定时器,定时器触发就通过代理对象更新视图:


[objc] 1. @implementation TimerControl 2. 3. 4. - (void) startTheTimer 5. { 6. 7. scheduledTimerWithTimeInterval:5.0f target:self selector:@selector(timerProc) userInfo:nil repeats:NO]; 8. } 9. 10. - (void) timerProc 11. { 12. self.delegate updateAlert];//代理更新UI 13. } 14. 15. @end



再来看看视图类,它首先要遵循上面定义的协议,才能”帮助”A类来处理事情,如下:

[objc] 1. #import <UIKit/UIKit.h> 2. #import "TimerControl.h" 3. 4. @interface DelegateDemoViewController : UIViewController<UpdateAlertDelegate> 5. 6. @end



很明显,协议在这里就像中间人的作用,没有这个中间人,就无法”受理代理”。注意代理和协议并不是总要一起实现,只是大部分情况下我们会用协议来辅助实现代理。B视图的实现文件也很简单: 

 

[objc] 1. - (void)viewDidLoad 2. { 3. super viewDidLoad]; 4. // Do any additional setup after loading the view, typically from a nib. 5. TimerControl *timer = [[TimerControl alloc] init]; 6. .delegate = self; //设置代理实例 7. startTheTimer];//启动定时器,定时5触发 8. } 9. 10. - (void)didReceiveMemoryWarning 11. { 12. super didReceiveMemoryWarning]; 13. // Dispose of any resources that can be recreated. 14. } 15. 16. //"被代理对象"实现协议声明的方法,由"代理对象"调用 17. - (void)updateAlert 18. { 19. UIAlertView *alert=[[UIAlertView alloc] initWithTitle:@"提示" message:@"时间到" delegate:self cancelButtonTitle:nil otherButtonTitles:@"确定",nil]; 20. 21. .alertViewStyle=UIAlertViewStyleDefault; 22. show]; 23. }


 

源码下载地址:

https:///pony-maggie/DelegateDemo

 


    你可能想看:

    扫描二维码推送至手机访问。

    版权声明:本文由皇冠云发布,如需转载请注明出处。

    本文链接:https://www.idchg.com/info/24708.html

    分享给朋友:

    “代理---代理---代理(这也把问题说清楚了,不过某些命名不是很规范)代理商关心的问题” 的相关文章

    中国电信CN2线路接线指南:快速搭建高效网络连接

    在当今信息化时代,网络已经成为企业运营和日常生活不可或缺的一部分。而对于追求高品质网络体验的用户来说,中国电信的CN2线路无疑是一个excellent选择。CN2线路以其高带宽、低延迟和高稳定性著称,广泛应用于企业、游戏服务器、视频传输等多个领域。对于许多用户来说,CN2线路的接线过程可能会显得复杂...

    如何有效解决VPS硬盘占用过高问题:优化与清理指南

    1.1 系统日志和缓存文件积累 系统日志和缓存文件是VPS硬盘占用过高的常见原因之一。每次系统运行或应用程序执行时,都会生成日志文件来记录操作和错误信息。这些日志文件随着时间的推移会逐渐积累,占用大量磁盘空间。缓存文件也是如此,它们用于加速系统或应用程序的运行,但如果不定期清理,也会占用大量空间。我...

    inet.ws纽约:高性能VPS服务与折扣优惠码解析

    inet.ws是一家新兴的互联网服务提供商,成立于2020年。尽管公司年轻,但它凭借创新的VPS服务迅速在市场上占据了一席之地。最让人称道的是,inet.ws致力于为用户提供稳定和高效的云服务器体验,尤其是在他们的纽约数据中心,这里被认为是其最重要的运营点之一。 在发展的过程中,inet.ws不断完...

    高性能HKT VPS服务评测与应用指南

    HKT VPS概述 什么是HKT VPS HKT VPS其实就是基于香港HKT网络架构的虚拟专用服务器,提供了强大的性能和灵活的可配置性。我从多个服务商的不同产品中了解到,HKT VPS非常适合对网络速度和稳定性要求较高的用户。无论是游戏玩家还是企业用户,都能通过它享受到快速的上传和下载速度。 HK...

    AWS VPS Free: 如何利用AWS Free Tier免费服务轻松构建云计算项目

    当我第一次接触AWS (亚马逊网络服务) 的时候,最吸引我的就是他们提供的各种免费的VPS服务。AWS的VPS免费服务实际上是一种叫做AWS Free Tier的计划,它允许用户在一定条件下使用AWS的多种服务而无需支付费用。这项计划的意义在于,它为刚入门的开发者和小型企业提供了一个绝佳的机会,能够...

    VPS建站:灵活、安全、高效的选择

    在网络世界中,VPS(虚拟专用服务器)建站是一种非常流行的选择。简单来说,VPS是一种将物理服务器划分为多个虚拟服务器的技术。这意味着你可以享受专用服务器的许多优点,同时又不会像独立服务器那样需要承担高昂的费用。个人或企业都可以利用VPS来构建网站,实现更大的自由度和灵活性。 使用VPS建站的最大优...