使用qt开发android应用iOS应用有何优劣?

Objective C (iOS) for Qt C++ Developers(iOS开发,Qt开发者需要了解什么?) - 推酷
Objective C (iOS) for Qt C++ Developers(iOS开发,Qt开发者需要了解什么?)
Qt/C++开发者眼中的Obj-C
对于我们第一次自定义iOS应用来说,对于来自Qt/C++开发者来说,我不得不学习Objective-C相关语法与知识
为了让读者能够更容易理解这篇博客的内容,我将描述诸多我所学到的东西.这将更多的是大脑转存而不是单一的教程
,所以我仍然希望这将对你很有帮助,我将首先写编程语言的差异,然后再写关于类库的差异
1.Objective C vs C vs C++
类似于C++,Obj-c是C语言的一个超集(这不是100%正确的,但是一个足够好的语句来理解它),您将使用的文件扩展名的头.h和.m来表示Obj-C语法
注意还有obj- c++文件扩展名.mm,虽然我现在还不会写.
类似于塞班c++,Obj-C是使用两个阶段进行构造:首先你在堆上分配对象,然后调用init方法.
通常可以避免调用两个方法和只使用一个静态简便的方法,直接给你一个新分配的对象(例如stringWithCString).
完全不同(起初非常分散)是Obj-C函数的调用方法,类似通常的C-ish方式,例如NSLog(@“我的日志消息”);但也有Obj-C语法对象的调用方法。
作为一个例子,这是对象有一个方法包含两个参数:obj(obj methodName:param1value param2:param2Value]。看起来很奇怪甚至别扭,但你要去适应它。
在Objective C,这是通常被称为发送消息,不仅仅是它的调用方法,还有好多我发现更加混乱.
在上面这个方法示例,methodName是所谓的选择器。一个选择器是一个方法的标识符。有时你必须识别方法(类似于一个函数指针),
在上面的例子中你可以这样写@selector(methodName:param2:).
在c++中没有根对象和Qt QObject仅用于一些对象,Objective C有强制性的根对象NSObject .
相反Qt你想信号/插槽,你只用QObject类,而Obj-c这里你用NSObject做任何事情.
自从iOS 5 实现ARC(自动引用计数),认为它像一个隐式QSharedPointer在你的对象。编码过程感觉到你有一个垃圾收集器。在内部,ARC告诉编译器插入保留(增加引用计数)和释放(减量引用计数和最终销毁)语句在您的代码中。
我认为这是很棒的,如果你坚持正常的做事的方式你基本上可以不再再担心内存泄漏.
Objective C属性类似于Qt中的Q_PROPERTY,这意味着您可以使用好obj.var = foo语法在代码内部(obj setVar:foo)消息称为(好吧. .消息发送)。您可以创建一个属性@property和编译器使用@synthesize为你做一个getter / setter。
当然也可以定制getter / setter实现更多的内部逻辑,例如实现延迟初始化。
你能想象Objective C委托作为一组插槽。委托对象的一个委托方法被对象调用通知某些事情已经发生。这非常类似于Java的接口
2.与Qt相关类相类似的东西
与语法一样重要是相关的库所提供的iOS(和OS X)。请继续阅读,了解他们提供的对象和功能。
NSString对象是一个常量字符串。您还可以创建通过@“followed by me”。有一个可变的字符串,必须使用NSMutableString配合其appendString,appendFormat等功能。尤其是appendFormat真的很有用。
如果你想做替换,stringByReplacingOccurrencesOfString是你的朋友,给你一个新的NSString对象。若是构建文件系统的路径,您可以使用stringByAppendingPathComponent。
像在c++中,基本类型像int不是对象。如果你需要包装在一个对象,您可以使用NSNumber和NSValue ,QVariant(类似)。据我所知:您可以使用intValue NSNumber或者NSString方法等转换为int类型。
NSArray、NSSet NSDictionary他们听起来像:一个容器来存储NSObjects。NSArray相当于QList,NSSet等于 QSet,还有NSDictionary 类似于QHash / QMap。
您需要使用他们可变泛型改变他们(例如NSMutableArray)。如果你想存储原始类型,您需要使用NSNumber、NSValue等包装。对于NSArray,您可以通过使用objectAtIndex访问对象。
NSDictionary,你使用valueForKey或objectForKey。
我没有做太多的关于文件IO方面的,所以我不能过多的写。有NSFileManager目录操作。你可以很容易地读(小)文件通过NSString stringWithContentsOfFile或NSData dataWithContentsOfFile。
记得在OS X和iOS系统都是基于POSIX标准,因此你也可以使用系统的方法得到原始性能或者效率更高。
谈到NSData:这是相当于Qt中QByteArray,可变的泛型,可以看看NSMutableData。你可以通过数据或访问mutableData方法得到char *指针。
我觉得现在的大多数移动应用程序使用HTTP。在Qt您将使用QNetworkAccessManager。在Objective C,你使用一个NSMutableURLRequest NSURLConnection内(或NSURLRequest)。您需要设置NSURLConnection委托。
委托处理异步事件时产生下载(readyRead信号连接:didReceiveData:完成信号connectionDidFinishLoading:等)。
如果你想做基于套接字的IO,我只能推荐GCDAsyncSocket。我以前尝试套接字编程iQuassel项目有几个原因,主要因为你必须使用Carbon代替Cocoa。GCDAsyncSocket也有不错的优势,您可以很容易地在一个线程中进行网络协议解析,避免阻塞UI线程。
谈到线程:你可以通过使用NSObject 的performSelectorInBackground实现基本的并发性。它使一个方法在后台线程中运行。它可以通过performSelectorOnMainThread传达其结果到主线程。如果你想做一个Qt-tish 0计时器调用,检查afterDelay: performSelector变异,选择器运行在一个事件循环调用。
更多高级先进的东西可以用NSOperationQueue或中央CPU调度。
NSRunLoop相当于Qt中的QEventLoop 。如果你在另一个线程处理事情和需要一个事件循环,例如网络IO。那您可以使用它来处理。
NSUserDefaults是一个很好的方式来存储和加载应用程序设置(与QSettings相类似)。
不幸的是Obj-c没有类似于于QtXmlPatterns的相关对象。libxml2存在在iOS设备上,因此您可以使用。对于简单的sax风格的解析,至少有NSXMLParser可以对付。
3.UI Things
XCode有视觉设计师(包括界面构建器),设计师可以设计一个故事板(UIStoryboard)包含大量的视图控制器(UIViewController子类)。每个视图控制器管理视图(还记得MVC吗?)。导航视图之间通过演变(UIStoryboardSegue)发生。
您可以通过源视图控制器的prepareForSegue方法在视图控制器之间移动数据。在得到由OS特定事件发生时调用每个视图控制器类似viewWillAppear等方法。
您使用“outlets”链接与他们的同一在界面构建器UI文件中控件的实例(例如UIButton、UILabel),用CTRL组合键进行拖拽.
Qt的诸多视图和控件,我不做太多与之对应的Obj—C方面的控件的比较。这里就看看UITableView的内容包括使用你的UITableViewDataSource 和UITableViewDelegate。我想说的几乎所有的iOS应用程序都会使用表视图。
如果你已经使用过QWebView,换成UIWebView也是一样.
QImage和QPixmap 等同于CGDataProviderRef,NSImage和CGImage.
你可以使用核心图形的方法自定义绘图。UIGraphicsBeginImageContextWithOptions创建一个上下文,您可以使用绘图功能。如果你想获得位图的上下文,尝试UIGraphicsGetImageFromCurrentImageContext。
QRect,QPoint是CGRect等价物,CGPoint CGSize。有助于你调试,检查NSStringFromCGRect和它的朋友们。
对于小部件,注意NS * UI类对应于OS X和UI *类对应于iOS.
当我开发Qt,我使用QtCreator,我的联合创始人奥利弗是KDevelop的粉丝,他也应该很喜欢QtCreator,对于iOS开发,您可以使用苹果免费的XCode开发工具。
苹果的工程师还为您提供一些单元测试类似于Qt的QTest。在XCode,创建一个新的测试类和使用方法例如:STAssertEquals STAssertTrue等等.
5.Want to know more?
我猜想 Qt的开发者论坛网站(http://qt-project.org/forums/)就相当于StackOverflow,iOS编程大多数问题在StackOverflow都可以找到答案和帮助。还有一个内部苹果开发者论坛(/IDMSWebAuth/login?appIdKey=4a75046cda87eab6386a9eae8caabbabc9c&path=/login.jspa)。
当然,如果你在Qt应用程序移植到iOS需要任何帮助 . 这就是Woboq能为你做的一件事!麻烦写信给我们.
已发表评论数()
已收藏到推刊!
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
没有分页内容
图片无法显示
视频无法显示
与原文不一致软件体积那么大有必要吗?
最近发现好多软件的软体积超级大,这里面还有好多的大家最常用的主流软件,他们为什么要做那么大呢?&br&比如,腾讯QQ的 pc客户端接近六十兆那么大,这个必要性在哪里呢?&br&QQ的安卓客户端也有接近三十兆,那么大,而安卓平板的迷你客户端,只有不到十兆的样子,我对比了一下功能也没有什么太大的差别啊!&br&再比如,微软的office客户端,通常八百兆左右,同样的金山的wps客户端只有不到五十兆的样子。&br&iPad上面的,微软office for ipad,一个word for ipad软件大概就二百多兆,苹果自己出的iwork系列也是大的很,但是我发现office 2 hd(现在的名字好像叫QuickEdit) 它的体积要小很多,功能方面,却十分相当,office2hd的功能还要强大些,而且还是免费的,不知道office for ipad为什么还是那么的受欢迎呢?&br&===================以下是新补充提问====================================&br&看到了那么多的回答,我想有必要把问题就说得具体有点顷向一点。&br&就来office for ipad来说吧:&br&1.Citrx ShareFile QuickEdit 软件大小15.8MB 已经实现了word、excel、powerpoint和txt的查看及基本编辑功能了,而且完美支持MS office 的各个版本,还支持无线传输和各主流网盘。&br&2.wps
软件大小97.5MB
实现了word、excel、powerpoint和txt的查看及基本编辑功能,目前看来这些功能还不如 QuickEdit 的强大,网盘支持也很差。&br&3.Microsoft Word for Ipad 软件大小246MB 免费版只支持word的查看,付费版还只支持word的编辑。如果要想把word、excel、powerpoint全凑齐的话,你要下载Microsoft Word for Ipad 、Microsoft excel for Ipad、Microsoft powerpoint for Ipad 三个软件,体积大小就是约700MB。我不理解为什么选择用Microsoft office for ipad的人为什么这么多?而在ipad上办公其实并不那么有意义。&br&4.iwork系列的软件我就不多说了,想必这个名气大家全了解。难道这就是品牌的力量吗?目前从这几个软件看来,我感觉是品牌越大,软件做的越差,但是实在不敢说MS的程序员的水平比Citrx ShareFile QuickEdit的差,更不敢说MS的远见不如Citrx ShareFile QuickEdit。&br&比如我用20M可以实现90%的功能,难道10%的功能那么有必要吗?以那么大的体积为代价是否值得呢?而且为什么10%的功能会需要那么大的体积才能支持呢?
最近发现好多软件的软体积超级大,这里面还有好多的大家最常用的主流软件,他们为什么要做那么大呢?比如,腾讯QQ的 pc客户端接近六十兆那么大,这个必要性在哪里呢?QQ的安卓客户端也有接近三十兆,那么大,而安卓平板的迷你客户端,只有不到十兆的样子,我对比了一下功能也没有什么太大的差别啊!再比如,微软的office客户端,通常八百兆左右,同样的金山的wps客户端只有不到五十兆的样子。iPad上面的,微软office for ipad,一个word for ipad软件大概就二百多兆,苹果自己出的iwork系列也是大的很,但是我发现office 2 hd(现在的名字好像叫QuickEdit) 它的体积要小很多,功能方面,却十分相当,office2hd的功能还要强大些,而且还是免费的,不知道office for ipad为什么还是那么的受欢迎呢?===================以下是新补充提问====================================看到了那么多的回答,我想有必要把问题就说得具体有点顷向一点。就来office for ipad来说吧:1.Citrx ShareFile QuickEdit 软件大小15.8MB 已经实现了word、excel、powerpoint和txt的查看及基本编辑功能了,而且完美支持MS office 的各个版本,还支持无线传输和各主流网盘。2.wps
软件大小97.5MB
实现了word、excel、powerpoint和txt的查看及基本编辑功能,目前看来这些功能还不如 QuickEdit 的强大,网盘支持也很差。3.Microsoft Word for Ipad 软件大小246MB 免费版只支持word的查看,付费版还只支持word的编辑。如果要想把word、excel、powerpoint全凑齐的话,你要下载Microsoft Word for Ipad 、Microsoft excel for Ipad、Microsoft powerpoint for Ipad 三个软件,体积大小就是约700MB。我不理解…
按投票排序
关于OFFICE, 曾经有过和楼主一样的吐槽。直到别人传给我了一份200多MB的doc文档。然后我就知道office 和 wps的区别了。---------------修改答案的分割线-------------------------手上正好有代码在写,突然想起这个问题顺便再说一下一个软件里面的代码量真正有用的功能的代码只有20%不到其中,又只有20%的功能是你的“常用”功能剩下的80%都是用来防止各种熊孩子乱搞的输入检查或者异常处理代码除了代码以外, 更大的体积是各种资源文件, 贴图,画界面之类的这些东西会占掉软件体积的80%以上,而且还耗时间这也是为什么工业上的软件都不会去做界面了吧把资源用在刀刃上至于界面折腾人的问题,这个答案可以参考下应用程序框架勉强可以分类到资源这里面,虽然很多机器都有提供,但是为了用户都能安装, 你始终还要再提供一份备用OK,总结一下对于一个完整的软件,假设体积100M 。其中:资源文件:80M输入检查和异常处理:16M其他功能:3.2M真正的"常用"功能的代码: 800K&_&
这差不多就是为什么软件体积那么大的原因吧
软件体积本质上是一个成本问题。无论软件体积变大还是变小,都是有成本的,具体要看哪个成本更高,最终会向着成本更低的方向发展。变大的成本,编译打包更慢,下载会占用更多带宽流量,用户下载安装时间更长,会导致用户流失率增加,更大的软件会更容易出错,性能也会更差。变小的成本,对工程师水平要求更高,需要增加开发测试的环节流程,开发时间更长,需要研究学习专门的技术去减小体积。单单就对工程师水平的要求这一项成本就远远超过变大的成本了。除非体积大到了一定程度,导致成本突然大幅度增加,才会去优化体积,比如安装盘已经大于一张CD了,导致生产分发成本大幅度增加。分享几个减小体积的方法(只针对VC++),当然应用这些方法是有成本的。1. 改编译选项,如果不是性能特别敏感可以用最小大小的优化选项2. 去掉RTTI和SEH支持3. 打开 /OPT:REF 和 /OPT:ICF4. 关掉 Buffer Security Check,这个有危险,慎用。5. 用Webp格式替换jpg和png,webp是神器,同等质量的图片只有jpg的30%-40%,无损格式只有png的一半左右。Qt 5.3开始已经内置了webp格式的支持。我的项目里有张jpg背景图,jpg是96kb,用webp只有13kb。表面看起来没什么区别要用放大镜才能看出细微区别。6. 在编译发布流程里增加大小检查,我们的持续集成系统会在每次大版本发布的时候给个报告,列出和上个版本相比,安装包变化了多少,其中每个文件分别变大变小了多少,很有参考意义。如果有某个模块突然暴涨,会派人去调查下原因的。
如果字典里面只有你认识的字,也用不了上千页,三五百页就足够了。
再举一个很难解决的成因 ──程序库(或组件、中间件)。现在的应用程序直接间接地使用了很多各式各样的内部/外部程序库。这些程序库里很可能有相似功能的实现,例如每个库为了跨平台都对于底层API包装一层、不使用C/C++标准库提供的功能又自行实现一些类似的功能。结果是最上层的软件变得越来越大。我觉得这可能是无解的,因为做应用程序的开发者不会花时间去修改(重构)这些库,而且修改后又会令到库的源码互相依赖度提升,不易更新维护,并失去了程序库的本意──可重复使用的程序。=============================================以QQ Windows版为例,我看到QQ/Bin/LICENSE下有这些第三方开源库bsdiffchromiumdmg_fpdynamic_annotationsgoogle-urliculibvpxlzmamodp_b64nsprprotobuf-litespeexxdg_user_dirs估计最大的是libcef.dll 19.3MB。另外icudt.dll也有5.5MB。
Autodesk的一个Suite是20G起跳,都是用32/64G的U盘装这里面有什么捏?有各种库,比如各种vc的runtime库,不管你原来机子有没有,总是给你带一份,省得你装到一半发现机子没有怎么办。各种第三方的库,比如Qt,TBB,libcurl,boost之类的。素材,各种设计软件自带的素材,这堆东西很占空间的。
看你这么描述,显然你低估了那些软件的功能到底有多强大。如果存在这样的认识上的误区那的确是无法理解为什么体积要那么大。
摩尔定律也顶不住:谁偷走了硬件性能?摩尔定律想必大家都非常熟悉,承“芯片每十八个月性能翻倍、价格腰斩”的贵言,这几十年来计算机发展只能用神速来形容。大家手中平板、手机等设备的运算能力,已经比当年将阿波罗送上月球的计算机高了不知多少去。但就是如此的计算力,在今天也只是用来切果打鸟。半眯着双眼,轻抚因CPU显得微烫的手机背面,划开锁屏,系统每个角落丝般顺滑。高科技的魅力,在摩尔定律的加持下,显得是如此美丽动人。当年把人送上月球的电脑的计算力,还不如现在把怒鸟送上太空的手机的计算力然而,将时间拨回到三年前,你会兀然发现,今天这一幕是如此熟悉。三年前的今天,你咬牙买来了当时最先进的手机,同样是划开锁屏,系统每个角落同样丝般顺滑。当时,你同样在感叹摩尔定律的神奇,同样震惊于将飞船送上月球的计算力居然被封装在小小的几寸盒子里,切果打鸟好不畅快。现在,再次从裤兜中摸出这部老搭档,摸得到的是熟悉的手感,再也摸不到的是熟悉的流畅度。在今时今日的应用环境,三年前的老旗舰举步维艰。点开App切果打鸟,半载才响应;多开几个网页,不好意思假死了;返回主屏,咦这过渡动画怎么一卡一卡。想要让流畅爽滑再次扑面而来?对不起,请拿好今年的最新款,到柜台付款吧,看你玩了这么久一定很喜欢吧!“想要重获流畅度吗?想要就给你,去买吧!把今年最新款买回来!”这时迷茫感突然扑面而至。不就是同样的功能嘛,为何老型号在三年前如鱼得水,在现在用着却感到如此蛋疼?再趴在地上仔细想想,情况好像不对头。按照摩尔定律,现在的手机性能是三年前的两倍有多了,而流畅度只和三年前持平,同时三年前的机器却卡了许多。摩尔定律,完全顶不住冥冥中有股神秘的力量把增长的性能吃掉!不然?也许现在用手机就能把飞船送到火星了,还玩什么切果打鸟!今年你用跑分虐我,当年我何尝不是一样虐前辈?怎样,是不是察觉到了一丝阴谋的味道?时至今日,摩尔定律依然不假,移动平台上尤为风生水起。无论是安卓机还是iPhone,砌硬件都砌得异常心狠手辣。安卓机月月旗舰周周机皇自不用说,每一代iPhone出来也都拥有不输安卓旗舰甚至稳压一头的性能。但与此同时,每每有最新版系统/应用软件出现,都能听到老用户的哀嚎都呼天抢地——只要一升级,运行速度一夜回到解放前。这时候新设备的价值似乎就得以体现了——熟悉的丝滑感,熟悉的钱包被掏空的快感。这个东西,似乎就是让摩尔定律扑街的关键了你问这里面是不是有什么玄机?恭喜你问对了。这里面的玄机,叫“安迪-比尔定律”。下面我们一起来了解一下这条令人不爽的定律吧。安迪-比尔定律:软件就是会越来越肿安迪-比尔定律非常了不得,大名鼎鼎的摩尔定律,在这条铁则面前也得抖三抖。说安迪-比尔定律统治了摩尔定律,似乎也不过分,当然这不会是因为安迪-比尔定律的名字比较长。无论摩尔定律拔高了多少硬件性能,人们都不得不年年掏钱升级新设备,这就是安迪-比尔定律的威力所在。安迪-比尔定律具体指什么?我们一起来看看。安迪-比尔定律不是定律,它是一个机遇!——by卖硬件的JS要讲安迪-比尔定律,先得提一下摩尔定律。摩尔定律大家都懂,网上普遍流传的是“芯片每18个月性能提高一倍,价格减半”,这不是原版。戈登·摩尔的原话是晶体管每24个月增加一倍,18个月是时任Intel主管的大卫·豪斯(David House)的说法。细节不要紧,大概意思基本一致。硬件的发展也的确如同摩尔定律所说,性能不断爆发式增长。24个月的说法拟合度更好,不过在近年的移动平台上套用18个月的说法也并无不可然而多年过去,事情却不对头,这硬件是涨了,但没感觉变快啊?三年前用电脑干什么活,现在也是基本如此。硬件猛了,但拔高的性能只能让芯片化身暖手宝,用来养电厂,这不坑爹么!转头一看,微软Intel合体的Wintel联盟笑而不语。这就是安迪-比尔定律的本质。所谓安迪-比尔定律,安迪指的是Intel前CEO安迪·鲁夫,比尔则是大家都知道的比尔·盖茨。这条定律可是把这两位IT大佬狠狠黑了一把啊。安迪-比尔定律的含义就是,安迪给啥,比尔拿啥;Intel产多猛的硬件,微软会用越来越臃肿的系统和软件统统吃掉增长的硬件性能。安迪-比尔定律,实质上所描述的,就是软件臃肿化的问题。安迪&比尔:别光看啊,快买呀随着功能的加入和交互的革新,软件做得越来越大,是很正常的事情。然而,软件臃肿化并不是单指软件体积膨胀,重点是软件增加的功能和变大的体积不成比例。安迪-比尔定律的主角是Intel和微软,但其实在整个业界中,软件臃肿化已是尾大不掉。无论是桌面平台还是移动平台,软件臃肿化的迹象都随处可见。桌面平台&移动平台:难逃软件臃肿化魔咒◆桌面平台近年来桌面平台软件臃肿化最令人菊花一紧的,应该当数了。Windows 一出,Aero毛玻璃特效亮瞎了无数人的眼,笑开了无数内存卖家的颜(虽然后来很快就哭了)。而同样的历史,也在Windows XP接过Windows 98大旗时上演过(Windows Me那破烂就不提了,Windows 2000隶属Server系列也不提了)。无论是Vista还是XP,都带来了大量革新,遗憾的是,带走的老机器也不计其数。说真的,当年期盼微软出个Vista+内存同捆套餐的人,不止一两个除了操作系统外,桌面应用软件的臃肿化也非常明显。以IM软件为例,多年过去,IM的主要功能没有发生什么大变化,还是打字语音加视频,但QQ 2003 10M不到的体积已成绝唱。虽然新版QQ 2013五十多M的体积,看上去似乎不算夸张。但多开几个窗口你会发现,连2G内存都喂不饱QQ。夭寿啦!1G内存都能养活Windows XP了!◆移动平台在移动平台上,软件臃肿化甚至要比桌面平台更严重。先来看看以优化效果拔群闻名的苹果,iOS 4的体积600M不到,而iOS7体积已经达到了1G多。至于所占资源嘛,瞧着当年行云流水iPhone 4被卡哭的样子,大家应该心里有数。而iPhone 4有什么功能是必须用iOS7才能实现?Siri?Touch ID?高速连拍?对不起,旧机型的标配是旧功能,以及卡顿。很多新功能都是新设备专属,功能增加和软件的增肥完全不成比例再来看看以硬件食量闻名的安卓,要不是安卓卡在了32位的瓶颈,恐怕在今年已经把RAM堆到4G了吧?8核+4G RAM,光是论名头,很多PC都没这么夸张,然而这是否就能喂饱安卓?还得打个问号。再加之安卓App受到的限制比iOS平台来得少,开发者们简直像是狂欢一样,拼命往里面添油加醋。安卓App变得重口而滞胃,实在吃不消啊。吃吧吃吧,越吃肥得越夸张,最后也许动都动不了可以说,无论是iOS平台还是安卓平台,无论是移动平台还是桌面平台,软件臃肿化现象都非常普遍。通胀是经济发展不可避免的现象,软件臃肿化似乎也在消费电子发展史上,充当了类似角色。为何安迪-比尔定律屡试不爽?软件臃肿化真的不能避免呢?我们一起来看看软件增肥的缘由。增肥的食粮:软件臃肿化三大缘由◆硬件需求进化:好钢用在刀刃上,刀刃同样要好钢前面提到,随着技术进步和用户需求的发展,软件增肥,本来是一件非常正常的事情。想要马儿跑,哪能让马儿不吃草。拿最直观的界面来说,早年的计算机只能够显示最基本的字母,如英文字母以及日文的假名等等,要显示各种汉字,还得增加字库容量;到了图形界面年代,从16色到256色到32位色,每一步进化都需要更先进的硬件铺路。想要用马车把人拉到火星上,未免也太魔法了点。虽然系统仍保留高效的命令行,但恐怕最令人流连忘返的,还是图形界面的各种吃资源特效十年前PC可以轻松解码DVD,对1080p的蓝光碟一筹莫展,而现在的手机都能放4K视频了;十年前手机可以听歌拍照,但和现在将随身听卡片机打得掉一地牙的手机相比,完全不是一回事。在未来,3D、全息以及沉浸式体验将会给人们带来另一番新天地。理所当然,这片天地必须要用更强劲的硬件才能撑得起。◆软件功能过剩:好钢用在刀刃上,刀背也来分杯羹不知道从什么时候开始,各种软件突然变得很喜欢把奇怪的东西塞进自己里面。一个好好的聊天软件,突然就多出了新闻浏览安全杀毒等功能;一个好好的浏览器,突然就多出了安全杀毒社交聊天等功能;一个好好的杀毒软件,突然就多出了社交聊天新闻浏览等功能。平时装三个软件可以得到三种功能,现在装三个软件得到九种功能,什么你说都是功能重复的?我听不到。总之就是一片顶三片,疗效特好,专治电脑性能过高!你告诉我,这是一个聊天软件?目前IT业界正处于从桌面端迁移到移动端、从本地迁移到云端的剧烈转型期,新兴的应用环境层出不穷。受业界大环境的影响,专精于某一项功能的软件变得越来越少,开发者们恨不得用一个安装包就统治了用户的使用环境,为前途和钱途铺好路。在这种指导思想下,打铁的也开始割麦子,煮饭的也开始负责炼钢。想把摩尔定律拔起来的性能都物尽其用,好钢通通用在刀刃上,各种随系统自启的软件应用摇晃着一身肥肉纷纷起身抗议不答应。杀了两三个流氓,还有无数后来人。◆软件欲求不满:好钢坏钢一箩筐,管他什么顶硬上现在电脑的性能真的过剩吗?对于某些开发者而言,硬件似乎没有什么过剩不过剩的区别。无论硬件有多高,总有人能够写出榨干性能的软件。这些软件又可以分为两类。第一类是无论是哪个时代都会出现粗制滥造导致的软件臃肿化。不管硬件性能去到多高,恶劣的代码总能够化神奇为腐朽,这在开放程度高的平台尤为常见。前面提到安卓平台软件臃肿化问题严重,就是着了这方面的魔了。安卓平台没有严格的审核,也没有细密的权限控制系统,入门门槛低,开发者可以放开手脚干。面对完全不稀缺的资源,恐怕懂得珍惜的人不多吧。于是,一堆狂吃硬件资源的安卓App诞生了。安卓的开发环境,太容易写出垃圾App了第二类是太过超前的软件,同样没有考虑到当前硬件平台环境。但和第一类不同,这类软件并不是粗制滥造,反而是经过精心设计——但看上去不像是为普通人设计的。以Windows Vista为例,笔者一直认为Vista是一个非常优秀的系统——前提是它不是运行在2006年主流配置为单核CPU和512M RAM的PC上。实际上,Windows 7大致就是Vista的马甲,两者性能速度硬件需求基本是同一水平,为何两者口碑差距如此大,除了一些细节的不同外,大概还是因为Windows 7诞生于2009年而非2006年吧。减肥成功案例:软件臃肿并非无药可救现代人的体重越来越夸张,以希望国为例,根据统计,美国的肥胖率已经接近三成。肥胖问题在美国每年可以造成约十万至四十万人死亡,并大幅增加医疗支出和其他社会成本,美帝每年需要在肥胖问题上花费1170亿美元,简直水深火热。现在的软件环境,和肥胖问题有异曲同工之处,人们不得不花大力气喂饱软件们贪婪的硬件需求,并直面由软件臃肿化带来的卡顿、停止响应、崩溃等问题,太虐心了。无论是人脑电脑,血管都被注入了时代特有的脂肪。无论在人类社会还是IT业界,肥胖都已经成为了大问题人们已经意识到了肥胖化的后果,减肥俨然已经成为了都市生活不可或缺的话题。同样,IT业界也在为解决软件臃肿化而努力。虽然软件臃肿化的大趋势并没有停止,但近年来被安迪-比尔定律折腾得吃不消,狂吃减肥药试图去除软件臃肿化的案例也不少。桌面平台的减肥成功人士代表为Windows,移动平台上则是安卓。一起来围观下,励志励志。◆减肥励志案例一:微软WindowsWindows Vista的肥胖饱受诟病,微软显然也知道自己的设计有点太超前了。从Windows 7开始,Windows系列投入了轰轰烈烈的减肥运动中。Windows 7是第一款比前代更省资源的Windows系统,意义重大。虽然减肥程度不算夸张,和Vista基本也是处于同一重量级,但加上I/O方面的进步,Windows 7给人的感觉要更加高效。从Vista到Windows 7,从Windows 7到Windows 8,微软每代都在减肥微软将减肥运动延续到了Windows 8这一代,Windows 8也成为了第二款比前代更省资源的Windows系统。按现在Windows往平板手机迁移的走向,Windows 9很有可能依然比前代更省资源,希望如此吧。◆减肥励志案例二:安卓4.4安卓的臃肿相信毋庸多言了,Google也痛定思痛,这次安卓4.4在优化上下了血本。首先,Google斥巨资2300万美元收购了法国雷恩的一家创业公司Flexycore,这是一家专注安卓优化的公司。然后在安卓4.4中,Google启动了“Project Svelte”(瘦身计划),系统内存需求、运算量峰值大大减少。此外,针对安卓App效率低下问题,Google不再完全依赖Dalvik虚拟机,启动了全新的ART机制,App运行速度大幅攀升。安卓4.4减肥成功,简直感天动地安卓4.4的努力效果拔群,有人将安卓4.4移植到了仅有512M RAM和单核CPU的Nexus S中,发现流畅度惊人,符合Google官方声称的“安卓4.4可以流畅运行于512M RAM设备”的宣传。减肥成功的安卓4.4对于用户来说无疑重大利好,也许安卓的硬件大战可以暂缓一下了。软件臃肿无法停息:为何大家放弃治疗?从Windows和安卓的例子可以看出,软件臃肿化并不是无药可救,但为何人们往往放弃治疗?我们可以来参考一下从来不会发生软件臃肿化的游戏机平台。游戏机平台的寿命长得惊人,动不动五年以上乃至再战十年。随着时间的冲刷,游戏机上的游戏优化效果甚至会越来越好。06年发布的PS3至今仍可玩到GTA5、Crysis 3等最新大作(虽然效果是差了点),06年的普通PC现在还能换几条柴?在游戏机平台上,软件索求的资源是稳定的,新游戏并不会比旧的更耗资源游戏机平台非常封闭,而且在长久的生命周期内硬件性能稳定得接近水平线。对于开发者而言,这一方面迫于严格的审核,必须对游戏成品精益求精,你不能乱来,最多也就搞搞内购;另一方面,稳定不变的硬件利于庖丁解牛,每一份性能该用在什么地方,会越来越了然于胸。游戏机能够在悠长的生命周期内由始至终高效发挥机能,绝缘软件臃肿化,和其独特的平台生态密切相关。开发环境、平台生态更迭太快,没法让开发者照应到老设备再回头看看一年一换甚至半年一换的电脑手机,压根没法为开发者提供稳定不变的开发环境,软件应用不得不尾随进化神速的硬件平台更新;同时,就算是审核以严格著称的iOS平台,苛刻程度也没法和游戏机平台相比,更别提门洞大开的Windows和安卓了。微软和Google自然坐拥能够在时代大潮中淡定观望,慢慢打磨代码的人力财力,放长线钓大鱼;但对于更多开发者来说,跟上平台更新的狂潮,用更多手段掌控用户,获取短期利益,才是更好的赚钱大法。至于软件肿不肿……神优化又能怎样?能发大财么?爱玩神优化的话,就让热心的独立开发者自个玩儿去吧。安迪-比尔定律仍会跟随摩尔定律很长时间后话不难发现,更迭越迅速的平台,越容易发生软件臃肿化现象。硬件狂魔安卓的应用比iOS更臃肿,移动平台比近年来放缓更新步伐的桌面平台更臃肿,五年前的PC还能顶用,五年前的智能手机已成弱智矣。不是大家不想减肥,兵荒马乱之中,今天不拼命给自己塞点什么,谁知道明天还有没有机会开饭?摩尔定律作用越明显,安迪-比尔定律的效用也就更大,不得不说这是消费电子发展的怪圈,时代的眼泪啊。在可预见的未来内,软件臃肿化依然不会停下脚步。摩尔定律和安迪-比尔定律相爱相杀的故事,恐怕还有很长一段历史可继续书写。然而,无法治疗和放弃治疗是两回事。作为一名用户,还是希望开发商们能够静下心来,思考用户体验的本质,让每一份增长的硬件性能都能物尽其用原文链接:
就是就是,君不见我linux上的libreoffice才50K,
M$弱爆了有木有,啊哈哈哈哈我真的没有胡说哦$ sudo yum info libreoffice
Loaded plugins: langpacks, refresh-packagekit
Available Packages
: libreoffice
: updates/20/x86_64
: Free Software Productivity Suite
: http://www.libreoffice.org/default/
: (MPLv1.1 or LGPLv3+) and LGPLv3 and LGPLv2+ and BSD and (MPLv1.1
: or GPLv2 or LGPLv2 or Netscape) and Public Domain and ASL 2.0 and
: Artistic and MPLv2.0
Description : LibreOffice is an Open Source, community-developed, office
: productivity suite. It includes the key desktop applications, such
: as a word processor, spreadsheet, presentation manager, formula
: editor and drawing program, with a user interface and feature set
: similar to other office suites.
Sophisticated and flexible,
: LibreOffice also works transparently with a variety of file
: formats, including Microsoft Office File Formats.
至于题主说的把一个软件精简分拆的事情在Linux上已经是通用做法,为啥上面这个东西只有50K。。。因为。。。libreoffice () 事实上被拆分成了几十个包(Fedora上),你完全可以只装你需要的部分,这在有包管理系统的Linux上是可行的,你想想在没有包管理系统的Windows上是啥感觉?我想装一个A,然后发现A被分拆为50个包,在50个包中找到20个是我需要的,然后我点了20次下载,期间因为 G F W 大姨妈中断了15次,付费软件还要付费20次,终于下载完了后开始逐个安装发现安装A1之前要先安装A30,安装A30时发现要先安装A35,安装A35时发现要先安装A30和B7(wtf),你想想你什么心情吧。所以Windows下的软件为了防止这种问题,直接把A1~A50打包在一起,顺便把BCDEF也都给你打包进去= =
泻药。软件体积那么大,没有必要;可是,软件体积那么小,有必要吗?-----------------------一来,图片资源很大,而且越来越大。二来,各种依赖库。三来,office这种做了那么多年的代码,各种历史遗留问题,各种历史包袱,是无法甩掉的。人体内部就有很多不常用、用不到的器官啊,比如扁桃体,比如阑尾,以前大家都认为他们没用,一出问题就割掉;可是后来终于发现他们也是很有用的。四来,清理无用代码和无用资源的代价相当大,而且会带来各种隐患。删掉一个图片容易,可是判断它有没有被引用过、能否删掉却不容易,要花费相当大的代价,甚至有时候是不可能的事情了。五来,存储空间越来越便宜,网络速度越来越快,使得这种清理并无必要。
我来翻译问题:「软件那么大,大部分功能大部分人都用不到,还不如删掉不常用的功能出一个精简版又小又方便多好。是这样吗?」
已有帐号?
无法登录?
社交帐号登录

我要回帖

更多关于 qt应用开发 的文章

 

随机推荐