`

吐槽:objective-c反人类

 
阅读更多

这几天把一段逻辑从服务端搬到客户端,基本上就是把js翻译成oc。直接对比,明显感到oc太烂了(仅针对语言本身,iOS应用框架还凑合)

比如下面这行JS代码:

var monthtag = bill_year + "-" + bill_month;

写成OC以后,非常晦涩。当然用NSMutableString能有个append方法,但是恶心程度也差不多:

NSString *monthTag = [NSString stringWithFormat:@"%@-%@", [NSString stringWithFormat:@"%d", billYear], [NSString stringWithFormat:@"%d", billMonth]];

再比如下面这行:

data[tag].total += bill.amount;

更加不忍直视:

NSMutableDictionary *content = [data objectForKey:tag];
float total = [[content objectForKey:@"total"] floatValue];
float amount = [[bill objectForKey:@"amount"] floatValue];
total += amount;
[content setObject:[NSNumber numberWithInt:total] forKey:@"total"];

简单想想,OC难用主要有几个原因:

1、强类型,而且隐式的类型转换不发达,需要程序员自己处理

2、各种API设计不方便。Array还差强人意,处理Dictionary时,十分痛苦。其实每次处理NSString,NSDate,NSCalendar时,编程体验也很差

3、不支持闭包(除了block),所以如果想拆分函数,要么就传参,要么就定义变量暂存;而js的scope chain就非常方便

包括iOS框架,我感觉都还有一些非常差的设计,比如:在iOS8之前,UIAlertViewDelegate需要根据tag来区分多个AlertView,还要通过index来区分按钮点击。到了iOS8,有了UIAlertController才好了一点

说实话我感觉如果不是有苹果罩着,OC应该早就退出历史舞台了。可能苹果自己也意识到这个问题,swift或许有所改善

分享到:
评论

相关推荐

    腾讯手机QQ共享WiFi密码引吐槽:新功能已下架.docx

    腾讯手机QQ共享WiFi密码引吐槽:新功能已下架.docx

    集群搭建:redis-3.2.1

    总共有16384个槽,每个数据键映射到特定的槽上,从而决定其在哪个节点上存储。 3. **主从复制(Master-Slave Replication)**:每个节点可以有多个从节点,主节点负责写操作,从节点复制主节点数据并执行读操作,提高...

    吐槽:web登录页面(by Alan)

    web登录页面

    Qt C++ 实现两个窗口切换,AB窗口切换源码演示

    那么B对象只需要有一个信号,当点击按钮的时候,发射信号,通知A上的槽执行功能即可。...A上还得有2个对象:this,还得有一个B的...一个槽负责: A-->B。另一个槽负责: B-->A。顺序如下: A--->B-->A。A的源文件:a.cpp。

    面向对象程序设计英文教学课件:15-Qt-&-Thread.pptx

    1. QtCore:包含了非GUI类的核心部分,如事件循环、信号和槽机制以及平台无关的抽象。 2. QtGui:提供了大部分GUI类,包括表格和复杂的2D画布小部件。 3. QtOpenGL:允许在渲染3D图形时使用OpenGL。 4. QtSql:与...

    C++ Qt 使用信号与槽实现多窗口切换,3个窗口的切换,ABC窗口切换

    要求A界面为主界面先显示,那就得把其他界面对象及功能槽都放到A界面类里面来,其他的2个界面B、C只需要负责发信号来触发功能即可。有3个槽:A-->B 的槽;A类: 有3个对象:this,B对象,C对象。 核心代码在包中给了...

    CoolSnail:酷蜗牛

    1. **面向对象编程基础**:Objective-C作为面向对象的语言,其核心概念如类(Class)、对象(Object)、继承(Inheritance)、多态(Polymorphism)和封装(Encapsulation)等将贯穿整个项目。开发者可能已经创建了...

    03-2 机械挖土分项工程质量管理.doc

    - **反铲、拉铲挖土机开挖**: - 端头挖土法:挖土机从端头以倒退行驶的方法开挖,自卸汽车配置在两侧装运土。 - 侧向挖土法:挖土机沿着一侧移动,自卸汽车在另一侧装运土。 - **安全距离**:挖土机沿挖方边缘...

    KDMacTouchBar:KDAB的Mac Touch Bar Qt小部件

    KDAB的KDMacTouchBar项目中涉及了Objective-C++,这是一种结合了C++和Objective-C的编程语言,特别适合在苹果生态系统中编写代码。Objective-C++允许开发者使用C++的面向对象特性同时访问Objective-C的Foundation...

    .net 三层架构制作吐槽网

    在".NET 三层架构制作吐槽网"项目中,我们看到这个应用可能包含用户登录、内容查看、信息发布、评论互动以及点赞功能,这些都是社交媒体平台的基础元素。下面将详细讲解这些知识点。 首先,三层架构主要分为以下三...

    V-King-CoreXY:V-King Pro 3d打印机-无杆CoreXY V型槽

    V-King Pro 3d打印机Roy Berntsen的无杆CoreXY V-Slot 3d打印机在此存储库中,您将找到V-King 3D打印机的打印文件和文档。... 社区链接: : : 这是一段视频,介绍了此设计的基本知识和好处: : 除非在文件或目录中指定...

    吐槽哥端口扫描器 v3.9

    一个快速高效的端口扫描工具,制定IP段扫描端口,还可以对部分路由器读取路由器相关用户信息。支持路由器或服务器型号:XM-3300N- ASUS- D-Link- LevelOne- Netis- Pozitron- TP-LINK支持端口:8080,80,8888,8081...

    林泉 12KW永磁同步电机参数

    - **槽型尺寸**:具体尺寸见下表: | 参数 | 尺寸 | |--------|------------| | 槽口宽 | 0.002mm | | 槽口深 | 0.0015mm | | 槽肩宽 | 0.005mm | | 槽肩深 | 0.0015mm | | 槽底宽 | 0.01mm | | 槽身深 | ...

    Qnmlgb吐槽网站

    一个留言类型的网站,适合新手。吐槽网站。特别适合新手进行学习。也可以直接使用。

    欧姆龙光电开关尺寸接线方法

    - **环境温度**:-25°C至+85°C - **防护等级**:IP65 #### 七、总结 欧姆龙光电开关EE-SX67/47系列以其高精度、可靠性和广泛的适用性,在自动化控制系统中发挥着重要作用。通过合理选择型号、正确的接线以及适当...

    吐槽:http://www.tucao.tv吐槽第三方Android客户端

    吐槽 特色 首页六大模块,推荐,新番,影剧,游戏,动画,频道 全站排行榜,支持每日/每周排序 放映时间表,可以查看周一到周日新番的更新情况 频道列表,支持按照发布时间/播放量/弹幕排序 视频搜索,支持分频道...

    IEC 60068-2-58:2017 测试Td:表面贴装器件的可焊性、抗金属化溶解性和抗焊接热的测试方法-英文电子版(76页)

    完整英文电子版 IEC 60068-2-58:2017 Environmental testing - Part 2-58:Tests - Test Td:Test methods for solderability, ... 焊槽法适用于流焊设计的SMD和回流焊设计的SMD,当焊槽(浸渍)方法合适时。

    水工建筑物模拟试卷之二(含答案).docx

    - 解析:正槽溢洪道的泄槽底坡通常采用比临界坡降更陡的斜坡,以加快水流速度。 26. **整体式平底板的计算方法** - 正确 - 解析:整体式平底板在计算时,可以将其沿顺水流方向截取板条作为梁进行分析。 27. *...

    Qt悬浮滚动条-滚动条样式

    我们可以利用Qt的信号与槽机制,当滚动条被激活时,使其临时出现,而当不再需要时隐藏。这样,滚动条在不影响内容显示的同时,又能提供必要的导航功能。 为了深度美化滚动条,我们需要使用Qt的样式表(QSS,Qt ...

    火箭:火箭-C ++的快速单头信号槽库

    "火箭"是一个专门为C++设计的快速单头信号槽库,它旨在提供一种高效、简洁的方式来实现对象间的通信。在C++编程中,信号和槽机制是一种常用的事件处理模式,常用于实现组件间的异步通信。这个库尤其适用于那些对性能...

Global site tag (gtag.js) - Google Analytics