这是一个肌球蛋白,拖着一个内啡肽,走在一个单纤维上,然后大摇大摆的走过你的大脑皮层,这是让你产生快乐的物质,它为了让你开心每天辛苦的拖着这个大东西,你还有什么理由难过呢?
1.图像
图片浏览控件MWPhotoBrowser 实现了一个照片浏览器类似 iOS 自带的相册应用,可显示来自手机的图片或者是网络图片,可自动从网络下载图片并进行缓存。可对图片进行缩放等操作。
2.下面是一些比较流行的第三方库:
首先整理了一份Github上排名靠前的iOS库(大概600个repos)
1.HTTP
相比较之下,AFNetworking是目前最优秀的一个了:轻量、易用、使用者多、开发者有在积极维护。在AFN出现之前,这个角色是由ASIHTTPRequest扮演的,只是到现在年久失修了。关于AFN和ASI的对比,这里有一篇不错的文章除此之外,MKNetworkKit和RestKit也有一定的使用者。
2.Socket
CocoaAsyncSocket无疑是目前封装得最完善的Socket库了:支持异步TCP/UDP,支持GCD,Objective-C接口封装。目前没有发现可以与之相比的同类产品。
3.JSON
JSONKit算是第三方中最优秀的一个了:性能很高,文件少。在JSONKit之前,SBJson非常非常流行,但是SBJson性能够差,只是由于历史原因仍然存在在某些工程里面。如果工程只需要支持iOS5以上的系统,那就可以放弃那些第三方Json库了,直接用系统提供的NSJSONSerialization,性能比第三方的好,又是官方API。
4.XMPP
现在做个实时聊天,XMPP协议算是很成熟的方案了。XMPPFramework一个很不错的选择,可以直接和OpenFire服务器打交道。项目不大人手不多的话,可以看看这个。
5.基础工具类
SSToolkit算是一个不错的工具包,提供各种比如编码、加密、字符串处理等等东西,还提供了一些不错的自定义控件,并且文档非常齐全。
6.框架
过去有很多人再用three20,这个东西太大太重,文档又少,到头来连Facebook都停止维护了。作为替代品nimbus现在流行了开来,关键在于它文档齐全。国内有个MVC框架叫BeeFramework,号称是顶级框架并且功能超过nimbus,有兴趣的可以看一下。ReactiveCocoa把响应式编程这种上流的东西带了过来,值得试一试。
7.数据存储
还是挺多人(比如我)喜欢直接跟SQLite打交道的,这方面FMDB封装的很不错。如果用CoreData来做存储的,可以用一下MagicalRecord。
8.图像处理
GPUImage无疑是这方面的集大成者了。用OpenGL ES2.0来实时处理图片和视频流,性能和功能都是顶尖的。
9.开发和调试工具
PonyDebugger看上去是一个不错的调试工具,可以在电脑浏览器上远程调试iOS程序、查看试图层次、网络等等。CocoaLumberjack是个Log工具,号称是可以提供企业级Log,使用者也挺多。
3.为了了解一下目前第三方库的普及程度,下面列举一些知名App对第三方库的依赖。
项目名称 | 所依赖的第三方库 |
---|---|
微信 | cocos2d、EGOTableViewPullRefresh、Facebook iOS SDK、JSONKit、SBJson、ziparchive |
ASIHTTPRequest、FMDB、CocoaAsyncSocket、JSONKit、MBProgressHUD、OpenUDID、SBJson、SVPullToRefresh | |
淘宝 | MAZeroingWeakRef、MBProgressHUD、ABContactHelper、ASIHTTPRequest、CocoaLumberjack、EGOTableViewPullRefresh、FMDB、GTMBase64、JSONKit、SBJson (json-framework)、RTLabel、SDWebImage、SVPullToRefresh、three20、ziparchive |
微博 | ABContactHelper、AFNetworking、ASIHTTPRequest、DACircularProgressView、DDProgressView、DTFoundation、fmdb、JSONKit、SBJson、MBProgressHUD、MTStatusBarOverlay、OpenUDID、SFHFKeychainUtils |
百度地图 | AFNetworking、GTMBase64、JSONKit、MBProgressHUD、RNCachingURLProtocol、SDWebImage |
网易新闻 | AppleReachability、ASIHTTPRequest、EGOTableViewPullRefresh、GTMNSString+HTML、MGTemplateEngine、MPOAuth、RegexKitLite、SDWebImage、SSZipArchive、wax |
多看阅读 | FMDB、ASIHTTPRequest、FreeType、JSONKit、Objective-Zip、Skia (Google)、MBProgressHUD |
人人 | cocoaasyncsocket、ZipArchive、MBProgressHUD、JSONKit、GTMBase64、MKNetworkKit、HPGrowingTextView、zxing |
AFNetworking、AFHttpClientLogger、Facebook SDK、iRate、MAKVONotificationCenter、SDWebImage、SFHFKeychainUtils、SSPullToRefresh、SVProgressHUD、TTTAttributedLabel、TTTLocalizedPluralString、UIAlertView-Blocks | |
iWork三件套 | MOKit、Boost C++ Libraryprotobuf、OpenGL Mathematics、SQLite、cephes math library |
Garageband | MurmurHash、libpng、zlib、SBJson (json-framework) |
可以看到,这些大型的App的依赖都很混乱,所以稍微解释一下。这些大公司都有一个iOS团队来协同开发,团队成员的水平也参差不齐。有时由于历史原因,例如某个App的某个组件依赖了ASIHttpRequest,但之后的新人改用了AFNetworking,就造成上面这种比较混乱的库依赖关系。这就造成难以维护、代码冗余等问题了。所以,引入一个第三方库一定要慎重考虑,如果可能,尽量自己开发和实现相应的功能,第三方库尽量只作为参考。小团队或者个人开发者可以不必过多考虑,开发速度优先。*