SQLite是一个开源的嵌入式关系数据库,它在2000年由D. Richard Hipp发布,它的减小应用程序管理数据的开销,SQLite可移植性好,很容易使用,很小,高效并且可靠。
SQLite嵌入到使用它的应用程序中,它们共用相同的进程空间,而不是单独的一个进程。从外部看,它并不像一个RDBMS,但在进程内部,它倒是完整的,自包含的数据库引擎。 嵌入式数据库的一大好处就是在你的程序内部不须要网络配置,也不须要管理。由于客户端和服务器在同一进程空间运行。SQLite 的数据库权限只依赖于文件系统,没有用户账户的概念。SQLite 有数据库级锁定,没有网络服务器。它须要的内存,其它开销很小,适合用于嵌入式设备。你须要作的仅仅是把它正确的编译到你的程序。
关于SQLite的开发资料较多,这里再也不细说。只是建议不直接操做SQLite库,而是采用一些开源的第三方库来进行操做。好比:
FMDB:https://github.com/ccgus/fmdb.git
对SQLite都作了不错的封装。html
UIView和UIImage模糊化java
https://github.com/nicklockwood/FXBlurView ios
UILabel标记处理git
https://github.com/nigelgrange/WPAttributedMarkup github
HTTPweb
相比较之下,AFNetworking是目前最优秀的一个了:轻量、易用、使用者多、开发者有在积极维护。在AFN出现以前,这个角色是由ASIHTTPRequest扮演的,只是到如今年久失修了。关于AFN和ASI的对比,这里有一篇不错的文章http://www.infoq.com/cn/articles/afn_vs_asi。除此以外,MKNetworkKit和RestKit也有必定的使用者。sql
Socket数据库
CocoaAsyncSocket无疑是目前封装得最完善的Socket库了:支持异步TCP/UDP,支持GCD,Objective-C接口封装。。目前没有发现能够与之相比的同类产品。。编程
JSONjson
JSONKit算是第三方中最优秀的一个了:性能很高,文件少。在JSONKit以前,SBJson很是很是流行,可是SBJson性可以差,只是因为历史缘由仍然存在在某些工程里面。若是工程只须要支持iOS5以上的系统,那就能够放弃那些第三方Json库了,直接用系统提供的NSJSONSerialization,性能比第三方的好,又是官方API。。
XMPP
如今作个实时聊天,XMPP协议算是很成熟的方案了。XMPPFramework一个很不错的选择,能够直接和OpenFire服务器打交道。项目不大人手很少的话,能够看看这个。
基础工具类
SSToolkit算是一个不错的工具包,提供各类好比编码、加密、字符串处理等等东西,还提供了一些不错的自定义控件,而且文档很是齐全。
框架
过去有不少人再用three20,这个东西太大过重,文档又少,到头来连Facebook都中止维护了。做为替代品nimbus如今流行了开来,关键在于它文档齐全。国内有个MVC框架叫BeeFramework,号称是顶级框架而且功能超过nimbus,有兴趣的能够看一下。 ReactiveCocoa把响应式编程这种上流的东西带了过来,值得试一试。。
数据存储
仍是挺多人(好比我)喜欢直接跟SQLite打交道的,这方面fmdb封装的很不错。若是用CoreData来作存储的,能够用一下MagicalRecord。
图像处理
GPUImage无疑是这方面的集大成者了。用OpenGL ES2.0来实时处理图片和视频流,性能和功能都是顶尖的。
开发和调试工具
PonyDebugger看上去是一个不错的调试工具,能够在电脑浏览器上远程调试iOS程序、查看试图层次、网络等等。CocoaLumberjack是个Log工具,号称是能够提供企业级Log,使用者也挺多。
为了了解一下目前第三方库的普及程度,下面列举一些知名App对第三方库的依赖。
网易新闻
AppleReachability
ASIHTTPRequest
EGOTableViewPullRefresh
GTMNSString+HTML
MGTemplateEngine
MPOAuth
RegexKitLite
SDWebImage
SSZipArchive
wax
Garageband
MurmurHash
libpng
zlib
SBJson (json-framework)
iWork三套件
MOKit
Boost C++ Library
protobuf
OpenGL Mathematics
SQLite
cephes math library
AFNetworking
AFHttpClientLogger
Facebook SDK
iRate
MAKVONotificationCenter
SDWebImage
SFHFKeychainUtils
SSPullToRefresh
SVProgressHUD
TTTAttributedLabel
TTTLocalizedPluralString
UIAlertView-Blocks
多看阅读
fmdb
ASIHTTPRequest
FreeType
JSONKit
Objective-Zip
Skia (Google)
MBProgressHUD
淘宝
MAZeroingWeakRef
MBProgressHUD
ABContactHelper
ASIHTTPRequest
CocoaLumberjack
EGOTableViewPullRefresh
fmdb
GTMBase64
JSONKit
SBJson (json-framework)
RTLabel
SDWebImage
SVPullToRefresh
three20
ziparchive
微信
cocos2d
EGOTableViewPullRefresh
Facebook iOS SDK
JSONKit
SBJson
ziparchive
ASIHTTPRequest
FMDB
CocoaAsyncSocket
JSONKit
MBProgressHUD
OpenUDID
SBJson
SVPullToRefresh
百度地图
AFNetworking
GTMBase64
JSONKit
MBProgressHUD
RNCachingURLProtocol
SDWebImage
微博
ABContactHelper
AFNetworking
ASIHTTPRequest
DACircularProgressView
DDProgressView
DTFoundation
fmdb
JSONKit
SBJson
MBProgressHUD
MTStatusBarOverlay
OpenUDID
SFHFKeychainUtils
人人
cocoaasyncsocket
ZipArchive
MBProgressHUD
JSONKit
GTMBase64
MKNetworkKit
HPGrowingTextView
zxing
能够看到,这些大型的App的依赖都很混乱,因此稍微解释一下。这些大公司都有一个iOS团队来协同开发,团队成员的水平也良莠不齐。有时因为历史缘由,例如某个App的某个组件依赖了ASIHttpRequest,但以后的新人改用了AFNetworking,就形成上面这种比较混乱的库依赖关系。这就形成难以维护、代码冗余等问题了。因此,引入一个第三方库必定要慎重考虑,若是可能,尽可能本身开发和实现相应的功能,第三方库尽可能只做为参考。 小团队或者我的开发者能够没必要过多考虑,开发速度优先。
最后吐槽一下cocoapods。
一个语言的流行总伴随着第三方库的丰富,相应的也会出现依赖库管理的工具。cocoapods之于ObjC,就像maven/gradle 之于java、gem之于ruby那样。 cocoapods基本上是建立在在github社区上的,开源而且社区活跃。除了用github上的中央仓库外,也能够本身搭建私服什么的随便乱搞。
但就我来讲,不推荐使用cocoapods,吐槽以下:
1.像maven这样的工具,是为了管理庞大的第三方库依赖、控制版本、构建工程等等而产生的,很难想象一个依赖了上百个jar包的web项目不用包管理构建会变成什么样。。可是,iOS开发是客户端的开发啊,若是真有一个工程依赖了那么多第三方工具,这个App能保持稳定吗。。一般状况下一个iOS工程不会有那么多包依赖。
2.按常理来看,一我的的手头不可能有太多的工程同时进行,也不太可能一天以内建立N个App来发布。cocoapods能节省的重复工做量,还不如它带来麻烦多。。
3.修改和调试不便。若是某个第三方库须要少许修改才能实现需求,用cocoapods来处理会比较麻烦。
关于第三方库,一样也不推荐过多使用,吐槽以下:
1.消耗时间,一个开源库,拿过来须要仔细考察代码质量,确认是否足够可靠。若是出现问题,须要仔细审查开源库的内部实现。若是这些工做太消耗时间,还不如本身实现。
2.可维护性差。一旦遇到系统升级、API更换,第三方库不能确保不出问题。当出问题后也难以找到人来维护。若是跟进第三方库的改变,仍然容易出现新问题。
3.法律问题。。大公司须要仔细审查许可协议,小公司各类不怕那就没问题。。