在ios开发中,简述object-c什么时候用delegate,什么时候用notification?


在iOS开发中,Objective-C 中的 Delegate 和 Notification 是两种不同的设计模式,它们在不同的情况下使用。 1. Delegate(委托)设计模式: 委托是一种对象设计模式,其中一个对象(委托)允许另一个对象(委托人)访问其方法。在这种情况下,委托充当着中间人的角色,为委托人提供一种访问受保护或私有的方法的方式。在iOS开发中,使用Delegate的最常见场景是在创建自定义控件时。例如,当您创建一个自定义的UIView子类并希望在用户与该视图交互时(例如点击按钮或滑动滑块)调用某些方法时,可以使用Delegate。在这种情况下,自定义视图将成为委托,而调用那些方法的对象则成为委托人。 使用Delegate的优点是: * 降低耦合性:通过使用委托,可以将对象之间的直接依赖关系更改为间接依赖关系,从而提高代码的模块化和可维护性。 * 提供更多控制:委托允许您控制哪些方法可以由委托人调用,从而提供更多的控制和安全性。 2. Notification(通知)设计模式: 通知是一种行为设计模式,其中一个对象(发布者)在状态改变时通知其他对象(观察者)。通知通过NotificationCenter进行,这是一种跨应用程序的广播机制,允许一个应用程序向其他应用程序发送通知。在iOS开发中,通知主要用于跨对象和跨线程通信。例如,当应用程序中的某些状态发生变化时(例如应用程序进入后台或收到低电量警告),可以使用通知来通知其他对象(例如UI组件)执行相应的操作。 使用Notification的优点是: * 异步通信:通知是异步的,发布者不需要等待观察者执行操作。这使得通知非常适合于跨线程通信和异步处理。 * 广播通信:通知允许一个发布者通知多个观察者,这使得通知非常适合于广播事件或通知多个对象进行相同的操作。 来说,Delegate通常用于对象之间的一对一通信,其中委托充当中间人,允许访问受保护或私有的方法。而Notification则用于一对多通信,其中一个对象的状态变化需要通知其他多个对象。在选择使用Delegate还是Notification时,需要根据具体的应用场景和需求来决定。 [2023-11-09 17:40:36 | AI写代码神器 | 465点数解答]
- 在ios开发中,delegate 和 notification 的区别(209点数解答 | 2023-11-08 00:40:02)172
- 这段代码可以优化吗?:import threading import time import random from ascript.ios.screen import findcolors, findimages from ascript.ios.system import r from ascript.ios import action # 随机点击函数 def random_click(x, y): offset_x = random.randint(-5, 5) offset_y = random.randint(-5, 5) action.click(x + offset_x, y + offset_y) # 生命值监控模块 def health_monitor(): while true: health_check = findcolors("635,20,#351614|636,31,#220704",rect=[632,16,640,39]).find_all() if health_check:(721点数解答 | 2024-10-19 15:16:56)215
- 下面这段代码提示:Map<K,V> is not applicable for the arguments (Object, Object),如何解决 @Override public void put(Object key, Object value, Long expireSecond) { map.put(key, value); expirationTimes.put(key, System.currentTimeMillis() + expireSecond * 1000); }(195点数解答 | 2025-01-17 10:30:53)147
- 在ios开发中,简单介绍下nsurlconnection类及+ sendsynchronousrequest:returningresponse:error:与– initwithrequest:delegate:两个方法的区别?(357点数解答 | 2023-11-09 17:41:10)137
- 在ios开发中,ios object-c对象可以被copy的条件?(334点数解答 | 2023-11-09 17:37:58)223
- 在ios开发中,ios对象的方法里面:self.name= “object”;和 name =”object” 有什么不同吗?(254点数解答 | 2023-11-09 17:41:41)205
- .method public 按钮1$被弹起(ii)v .locals 4 .param p1, "\u6a2a\u5750\u6807" # i .param p2, "\u7eb5\u5750\u6807" # i .prologue .line 20 new-instance v0, ljava/lang/stringbuilder; invoke-direct {v0}, ljava/lang/stringbuilder;-><init>()v iget-object v1, p0, lcom/chuchenqi/窗口29;->手机1:lcom/e4a/runtime/components/impl/android/n9/手机; invoke-interface {v1}, lcom/e4a/runtime/components/impl/android/n9/手机;->取imei码()ljava/lang/string; move-result-object v1(208点数解答 | 2024-09-12 16:36:31)266
- 只修改g_best和p_best这两行代码import random class point(object): def __init__(self, x, v): self.x_list = [x] self.v_list = [v] self.fit_list = [] class pso(object): def __init__(self): # 学习因子 self.c1 = 2.0 self.c2 = 2.0 # 种群数量 self.m = 5 # 惯性因子 self.w = 0.5 # 迭代次数 self.iter_num = 100 # 定义域 self.x_bound = (0, 31) self.group = self._init_x_list() # 得分函数 @staticmetho(298点数解答 | 2024-10-29 21:10:07)195
- dim caizhi1 as string dim caizhi2 as string dim caizhi as string dim dianzulv1 as double dim dianzulv2 as double dim midu1 as double dim midu2 as double dim zhijing as double dim jiejubi as double dim jiemianji as double dim zhouchang as double dim dianzusichangdu as double dim zhongliang as double dim quanshu as double dim jieju as double dim dianzulv as double dim midu as double dim zuzhi as double private sub command1_click() dim xlapp as object dim xlworkbook as object dim xlworkshee(32点数解答 | 2024-10-31 15:19:51)208
- .method public setupplayer(lcn/subat/music/model/spplayconfig;ljava/lang/string;i)v .registers 6 .line 299 iget-object v0, p0, lcn/subat/music/fragment/player/spmovieplayerfragment;->covermask:lcn/subat/music/base/spconstraintlayout; const/16 v1, 0x8 invoke-virtual {v0, v1}, lcn/subat/music/base/spconstraintlayout;->setvisibility(i)v .line 300 iget-object v0, p0, lcn/subat/music/fragment/player/spmovieplayerfragment;->sharetip:lcn/subat/music/base/sptextview;(29点数解答 | 2024-11-05 01:36:35)210
- Assets\daima.cs(10,19): error CS0120: An object reference is required for the non-static field, method, or property 'Object.name' (207点数解答 | 2025-06-07 18:14:38)78
- "D:\Pycharm - base directory\venv\Scripts\python.exe" "D:\Pycharm - base directory\venv\test 2025\数学建模\问题二.py" Traceback (most recent call last): File "D:\Pycharm - base directory\venv\test 2025\数学建模\问题二.py", line 60, in <module> prob += total_width_count >= order["quantity"] * 2 File "D:\Pycharm - base directory\venv\Lib\site-packages\pulp\pulp.py", line 1773, in __iadd__ raise TypeError("A False object cannot be passed as a constraint") TypeError: A False object cannot be passed a(597点数解答 | 2025-08-08 09:33:27)75