当前位置: 首页 > news >正文

3d打印 东莞网站建设新手如何搭建自己的网站

3d打印 东莞网站建设,新手如何搭建自己的网站,易旅游网站建设,oppo软件商店app下载文章目录 二十三、通过委托与数据源协议进行对象间通信二十四、将类的实现代码分散到便于管理的数个分类之中二十五、总是为第三方的分类名称加前缀二十六、切勿在分类里面声明属性二十七、使用“class-continuation分类”隐藏实现细节二十八、通过协议提供匿名对象 二十三、通… 文章目录 二十三、通过委托与数据源协议进行对象间通信二十四、将类的实现代码分散到便于管理的数个分类之中二十五、总是为第三方的分类名称加前缀二十六、切勿在分类里面声明属性二十七、使用“class-continuation分类”隐藏实现细节二十八、通过协议提供匿名对象 二十三、通过委托与数据源协议进行对象间通信 要点 委托模式为对象提供了一套接口使其可由此将相关事件告知其他对象。将委托对象应该支持的接口定义成协议在协议中把可能需要处理的事件定义成方法。当某对象需要从另外一个对象中获取数据时可以使用委托模式。这种情况下该模式亦称“数据源协议”若有必要可实现含有位段的结构体将委托对象是否能响应相关协议方法这一信息缓存至其中。 二十四、将类的实现代码分散到便于管理的数个分类之中 类中经常容易填满各种方法而这些方法的代码则全部堆在一个巨大的实现文件里。 有时这么做是合理的因为即便通过重构把这个类打散效果也不会更好。在此情况下可 以通过Objective-C的“ 分类” 机制把类代码按逻辑划人几个分区中这对开发与调试都 有好处。 比如说我们把个人信息建模为类。那么这个类就可能包含下面几个方法: #import Foundation/Foundation.hinterface EOCPerson : NSObject property (nonatomic, copy, readonly) NSString *firstName; property (nonatomic, copy, readonly) NSString *lastName; property (nonatomic, strong, readonly) NSArray *friends;- (id)initWithFirstName: (NSString *)firstName andLastName:(NSString *)lastName;/ * Friendship methods * / - (void) addFriend:(EOCPerson *)person; - (void) removeFriend:(EOCPerson *)person; - (BOOL) isFriendsWith:(EOCPerson *)person;/ * Work methods * / - (void) performDaysWork; - (void) takeVacationFromWork;/ * Play methods * / - (void) goToTheCinema; - (void) goToSportsGame;end现在类的实现代码按照方法分成了好几个部分。所以说这项语言特性就叫做“分类”。本例中类的基本要素诸如属性与初始化方法等都声明在“主实现”里。可是随着分类数量增加当前这份实现文件很快就膨胀得无法管理了此时就可以把每个分类提取到各自的文件中去以EOCPerson为例可以按照其分类拆分成下列几个文件 EOCPerson Friendship(.h/.m) EOCPerson Work(.h/.m) EOCPerson Play(.h/.m)//EOCPerson Friendship.h #import EOCPerson.hinterface EOCPerson (Friendship) - (void) addFriend:(EOCPerson *)person; - (void) removeFriend:(EOCPerson *)person; - (void) isFriendsWith:(EOCPerson *)person; end//EOCPerson Friendship.m #import EOCPerson Friendship.himplementation EOCPerson (Friendship) - (void) addFriend: (EOCPerson *)person {/* ... */ } - (void) removeFriend:(EOCPerson *)person {/* ... */ } - (BOOL) isFriendsWith:(EOCPerson *)person {/* ... */ }end并且我们之前有说过私有方法的命名通过特殊的前缀将私有方法指示出来那么我们学了分类规划之后我们还可以通过创建一个分类这个分类其中全是私有方法通过这种方法将这些私有方法都规划到一个类中当然其还是的遵循之前的命名规则。 要点 使用分类机制把类的实现代码划分成易于管理的小块。将应该视为“私有”的方法归入名叫Private的分类中以隐藏实现细节。 二十五、总是为第三方的分类名称加前缀 分类机制通常用于向无源码的既有类中新增功能但是他也存在相应的问题分类中的方法是直接添加在类里面的他们就好比这个类中的固有方法。将分类方法加入类中这一操作是在运行期系统加载分类时完成的。运行期系统会把分类中所实现的每个方法都加入类的方法列表中。如果类中本来就有此方法而分类又实现了一次那么分类中的方法就会覆盖原来的那一份实现代码。并且多次覆盖的结果以最后一个分类为准。 所以我们要做的就是总是为第三方的分类名称加前缀,以如下代码为例子 要点 向第三方类中添加分类时总应给其名称加上你专用的前缀。向第三方类中添加分类时总应给其中的方法名加上你专用的前缀。 二十六、切勿在分类里面声明属性 分类只能添加新的方法但是不能添加属性成员变量我们尝试添加成员变量会出现警告 Property age1 requires method setAge1: to be defined - use dynamic or provide a method implementation in this category属性“age1”需要定义方法“setAge1:”—请使用dynamic或在此类别中提供方法实现这个警告只是需要我们给用property关键字添加的属性手动完成setter getter方法但是当我们在写settergetter方法的时候一旦涉及到我们在类别定义的属性的时候就会报错 当然我们使用关联对象便可以解决这个问题但是并不建议那么做 我们有时候可以在分类中添加一些只读的属性readonly但是需要获取方法并不访问数据且属性也不需要实例变量来实现 要点 类别和扩展都可以为 原来的类添加新的方法但是类别的方法不实现系统不会提供警告扩展的方法不提供实现系统会提示警告。原因是扩展在编译的时候阶段被添加到类中分类在运行的时候才添加到类中把封装数据所用的全部属性都定义在主接口里。在“class-continuation分类”之外的其他分类中可以定义存取方法但尽量不要定义属性 二十七、使用“class-continuation分类”隐藏实现细节 class-continuation分类 OC动态消息系统的工作方式决定了其不可能实现真正的私有方法或者私有实例变量。那么怎么实现私有变量和私有方法呢这就要用到特殊的“class-continuation分类”了。 “class-continuation分类”和普通的分类不同他必须定义在其所接续的那个类的实现文件里并且这个类没有名字。 interface EOCPerson () // Methods here end这样你就可以在其中定义你的私有方法和私有变量了这样有什么好处呢公共接口里本来就能定义实例变量。不过把它们定义在“class-continuation分类”或“实现块”中可以将其隐藏起来只供本类使用。这些实例变量也并非真的私有因为在运行期总可以调用某些方法绕过此限制不过从一般意义上来说他们还是私有的。此外由于没有声明在公共头文件里所以将代码作为程序库的一部分来发行时其隐藏程度更好。 “class-continuation分类”的合理用法 “class-continuation分类”还有一种合理用法就是将public接口中声明为“只读”的属性扩展为“可读写”以便在类的内部设置其值。 就是说你在外部**.h**文件中定义一个“只读”的属性然后你又在“class-continuation分类”将其的“只读”属性改为“可读写”的那么这样下来在外部看来他就是一个“只读”的属性但是你可以在其内部自定义的设置其值了他在内部来说就是“可读写”的了。 这样做很有用既能令外界无法修改对象又能在其内部按照需要管理其数据。这样封装在类中的数据就由实例本身来控制而外部代码则无法修改其值。 还有一种用法若对象所遵从的协议只应视为私有则可在“class-continuation分类”中声明名这样就不会泄漏我们所遵从的协议 #import EOCPerson.h #import EOCSecretDelegate.hinterface EOCPerson () EOCSecretDelegate endimplementation EOCPerson /* ... */ end要点: 通过“class-continuation分类”向类中新增实例变量。如果某属性在主接口中声明为“只读”而类的内部又要用设置方法修改此属性那么就在“class-continuation分类”中将其扩展为“可读写”。把私有方法的原型声明在“class-continuation分类”里面。若想使类所遵循的协议不为人所知则可于“class-continuation分类”中声明。 二十八、通过协议提供匿名对象 利用协议把自己写的API的细节隐藏起来将返回的对象设置为遵从协议的纯id类型这样就达到了匿名对象的效果因为在OC里id类可以指代任何的一个类型此概念就叫匿名对象。 property (nonatomic, weak) idEOCDelegete delegate;这个delegate就是“匿名的”因为当你调用这个delegate的时候你并不知道它指的是那个类而你却又能使用它所指代类的方法这就把那个类给隐藏起来了匿名对象也是同样的原理。 因为你可能定义很多的类但是我们不能将它们都继承于同一个类并且在OC中只有id类型可以将这些类的随便一个类都返回所以我们在使用匿名对象的时候一定是返回的id类型。比如我们将所有数据库都具备的那些方法放到协议中令返回的对象遵从此协议。 先定义一个协议其中包括数据库都有的方法 protocol EOCDatabaseConnection - (void)connect; - (void)disconnect; - (BOOL)isConneceted; - (NSArray *)performQuery:(NSString *)query; end提供一个单例接口 #import Foundation/Foundation.hprotocol EOCDatabaseConnection;interface EOCDatabaseConnection;(id)sharedInstance; - (idEOCDatabaseConnection)connectionWithIdentifier: (NSString *)identifier;end这样的话处理数据库连接的类名称就不会暴露了来自不同框架的那些类限制就都可以使用同一个方法来返回了而不用对每个类都写一个这种协议。 要点 协议可在某种程度上提供匿名类型。具体的对象类型可以淡化成遵从某协议的id类型协议里规定了对象所实现的方法。使用匿名对象来隐藏类型名称或类名 。如果具体类型不重要重要的是对象能够相应定义在协议里的特定方法那么可使用匿名对象来表示。
http://www.pierceye.com/news/536031/

相关文章:

  • 网站梦打开又提示无法访问dw网页设计代码茶文化
  • 阳江营销型网站建设wordpress防攻击插件
  • 深圳电信网络建站东莞房价2022最新价格
  • 昆山营销型网站建设温州网上商城网站建设
  • 网站html动态效果asp化妆品网站源码
  • 丹东网站seo国家企业工商网查询
  • 好看云在线网站模板江西省建设厅教育网站
  • 小网站百度做一个网站怎么做呢
  • 城市分站seoseo相关岗位
  • 购物网站开发语言wordpress分类指定页面
  • 中企动力做网站的优势做招聘网站经营范围
  • 重庆企业网站排名优化方法百度录入网站
  • 做薪酬调查有哪些网站校园二手交易网站设计的原则
  • 建设电子商务网站的方法有?网站架构图
  • 网站运营阶段wordpress首页没有显示文章图片
  • 2个小时学会网站建设手机兼职快递录单员
  • 以前有个自助建设网站东莞路桥投资建设公司招聘
  • 电子游艺网站开发常德seo技术
  • 河北邢台wap网站建设南昌网页制作
  • 山东建设人才网站高端母婴网站模板
  • 物业服务网站建设佛山做网站公司有哪些
  • 企业网站模板中文网站域名名字
  • 在服务器网站上做跳转网页设计代码动漫
  • 科协网站建设的意见合肥哪里有做网页的地方
  • 为企业做网站策划案永康网站推广
  • 做个企业网网站怎么做linux建网站
  • 专业建站公司主要做什么wordpress加入下载标签
  • 韩都衣舍网站建设方案美食网站怎么做dw
  • 电商网站开发 参考文献wordpress验证码注册
  • ic外贸网站建设wordpress和shopex