从品牌网站建设到网络营销策划,从策略到执行的一站式服务
首先,让我们看看为什么要使用delegate。
创新互联是一家专业提供信阳企业网站建设,专注与成都网站制作、网站建设、H5网站设计、小程序制作等业务。10年已为信阳众多企业、政府机构等服务。创新互联专业网络公司优惠进行中。
一个典型的ios应用程序会有各种类型的对象:windows,tables,buttons,input boxes等等。在一个特定的应用程序中,你会让每个对象做特定的事情。比如说当用户点击一个按钮的时候,会执行一个特定的操作或者使用一个table显示特定的数据。
每个对象实例会有处理 特定 的事情。比如说我们有一个UITableView的实例,我们可能会让它以特定的方式来显示特定的 数据,同样的,我们对table的每一行进行tapping或者swiping操作的时候,它们也会做出自己特有的事件处理方式。为了避免为达到某一个特定的目的(actions or events)而创建一个子类(如果有多种不同的特定目的就会创建多个子类),你可以写出响应这些操作或者事件的方法,它们会在这些操作或者事件发生的时候被调用,为了达到此目的,你只需要给这个对象一个delegate(一个对象)。你可以使一个类作为其他一个对象或者多个对象的delegate。
简单的说代理就是在类外,让特定的人对该类做特定的操作的一种实现方法。
开发中有这么一种情况,详情页面 detailsVc 持有 model, 需要将model传给编辑页面 editVc ,然后在编辑页面修改
如果直接使用
会出现这么一种情况: 在 editVc 中修改,不管是否保存,返回 detailsVc 页面,数据都会有变化,因为 model 在 editVc 中被修改了!
原因,看指针地址
因为我 model 写了懒加载,开始有个内存地址,但是赋值之后,内存地址变成了赋值model的内存地址, 也就是传递的时候,只是 detailsVc 将持有的 model 的指针,传给了 editVc 的model,并不是新建了一个值! editVc 修改model 修改的是指针指向的区域的值,导致了detailsVc 的 model 随着变化,避免这种情况,就需要用到copy.
但是直接这样写,会崩溃! 因为调用 copy 方法时,对象会调用 copyWithZone: 方法来实现赋值!
解决办法: 让对象实现 NSCopying 协议
当然,属性太多,这样写也够累的,可以利用 runtime 完成
ps: 这里 不能 return self ! copy 我们只是新建了一个来一个个赋值上去, return self 的话,就是把原本的返回,而不是 copy 出来的新对象!
对象:OC对象的本质是结构体,结构体内部是一个指针
iOS对象分为实例对象、类对象、元类对象。
成都网站建设公司地址:成都市青羊区太升南路288号锦天国际A座10层 建设咨询028-86922220
成都快上网科技有限公司-四川网站建设设计公司 | 蜀ICP备19037934号 Copyright 2020,ALL Rights Reserved cdkjz.cn | 成都网站建设 | © Copyright 2020版权所有.
专家团队为您提供成都网站建设,成都网站设计,成都品牌网站设计,成都营销型网站制作等服务,成都建网站就找快上网! | 成都网站建设哪家好? | 网站建设地图