为什么说oc是oc面向对象的理解command编程

- System Error
Discuz! System Error
已经将此出错信息详细记录, 由此给您带来的访问不便我们深感歉意.HTTP 错误 404 - 文件或目录未找到。
友情提示:暂时无法访问该页
404b:您正在访问的页面可能已经删除、更名、内容过期或暂时不可用,所以造成了您的访问出错。
Internet 信息服务 (IIS)
这可能是由于软件或者文章内容陈旧失效或者发布了新版本造成的,请到进行搜索;
可能您会发现更好的内容和更先进的版本。
☉ 请进行以下操作尝试解决本问题:
确保浏览器的地址栏中显示的网站地址的拼写和格式正确无误。
如果通过单击本站站内的链接而到达了该网页,请与我们联系,告诉我们该链接的格式不正确。
单击按钮尝试另外的一个链接。
到我们的论坛发帖提醒
VIP会员请转到& 或 联系客服人员解决问题
你可能会在找到你需要的内容,因此请等待,页面即将跳转到主站
:新手学习的最佳去处
如果您对本站有任何疑问、意见、建议、咨询,请致信管理员E-mail:@
我们在等待你的投稿,你的作品无论是软件或者动画和文章,投稿页面:/tg.html
☉ 版权所有 Copyright &
All rights reserved主题信息(必填)
主题描述(最多限制在50个字符)
申请人信息(必填)
申请信息已提交审核,请注意查收邮件,我们会尽快给您反馈。
如有疑问,请联系
既然选择了ACM了,那就好好爱它,不管风雨兼程.
简介本篇文章主要回顾一下——iOS函数式编程 && 响应式编程概念,如何一步步实现函数式编程的过程,对阅读Masonry
SnapKit源码有一定的帮助。作为一个iOS 开发者,那么你一定用过Masnory/ SnapKit;
Masonry是一个OC开发中,非常好用的自动布局的第三方框架;
SnapKit是Masonry团队打造的Swift版本的自动布局框架;
如果你没有用过,在自动布局中用的是苹果原生的或者原生的升级版VFL语言,那我只好为你点“赞”!一个典型的Masonry的语句:make.centerY.equalTo(self.view).offset(100)就是这个“.”让Masonry更加鲜活的展示给了开发者,在我心中Masnory/SnapKit函数式编程的一个经典的代表作,非常值得参考和学习!链式编程的好处不用再说了,用过Masnory/ SnapKit的都知道;那么问题来了,怎么写链式编程呢?一步步来实现一个函数式编程
新建项目command +shift + N
创建一个Person类,并为其增加两个方法:
- (void)简单实现:
- (void)run{
NSLog(@"run");
- (void)study {
NSLog(@"study")
}实例化并调用相关的方法: Person*person = [[Personalloc]init];
[personrun];
[personstudy];以上三步实现了一个非常简单的程序。最终目标:
person.runBlock().studyBlock().runBlock()
person.studyBlock().studyBlock().runBlock()分解目标:1.先实现这种方式调用:
[[person run1] ];2.再实现最终目标:显然,如果想要实现[person run1]调用一个方法,那么run1就需要一个返回一个对象,让这个对象去调用study1。这样分析后,就简单了,就是增加一个返回值。代码:
-(Person*)run1;
-(Person*)study1;
- (Person*)run1 {
NSLog(@"run");
return [[Personalloc] init];
- (Person*)study1{
NSLog(@"study");
return[[Personalloc]init];
}实现最终目标:
person.runBlock().studyBlock().runBlock()在OC中,`()`block是以()的形式去执行的,猜想如果返回一个block的话,那么我就可以用()来实现runBlock()这种效果了吧!再结合我们的分解步骤,runBlock()代表执行了一个block,如果这个block的返回值的是一个对象的话,那么调用另外一个方法;这样就可以一直链接下去吧!实现了我们想要的目标!代码://声明
- (Person* (^)())runB
- (Person* (^)())studyB
- (Person* (^)())runBlock {
Person* (^block)() = ^() {
NSLog(@"run");
- (Person* (^)())studyBlock {
Person* (^block)() = ^()
NSLog(@"study");
}再来看一下Masonry的一个函数式编程:make.right.equalTo(self.right).insets(kPadding)最终调用的函数:返回的就是一个返回值为MASConstraint的block- (MASConstraint* (^)(id))equalTo {
return ^id(idattribute) {
return self.equalToWithRelation(attribute,NSLayoutRelationEqual);
}函数式编程总结
如果想再去调用别的方法,那么就需要返回一个对象;
如果想用()去执行,那么需要返回一个block;
如果想让返回的block再调用对象的方法,那么这个block就需要返回一个对象(即返回值为一个对象的block)。
响应式编程的概念在网上流传一个非常经典的解释“响应式编程的概念”:在程序开发中,a=b+c,
赋值之后b或者c的值变化后,a的值不会跟着变化。响应式编程,目标就是,如果b 或者c的数值发生变化,a的数值会同时发生变化。感谢作者Yangsc对本文的授权。
作者简介: Yangsc,曾就职于RaiseChip,负责底层驱动的编写、音频、视频驱动的编写和优化、目前在北京从事iOS音视频相关的开发,微博:O_oYangsc,博客:
第一时间掌握最新移动开发相关信息和技术,请关注mobilehub公众微信号(ID: mobilehub)。
日-19日,由CSDN重磅打造的将在上海举行。这两场峰会将邀请业内顶尖的架构师和技术专家,共同探讨高可用/高并发系统架构设计、新技术应用、移动应用架构、微服务、智能硬件架构、云数据库实战、新一代数据库平台、产品选型、性能调优、大数据应用实战等领域的热点话题与技术。
2月29日24点前仍处于阶段,单场峰会(含餐)门票只需799元,5人以上团购或者购买两场峰会通票更有特惠,限量供应,预购从速。()。}

我要回帖

更多关于 oc 面向协议编程 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信