仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2135|回复: 19
打印 上一主题 下一主题

[学习教程] IOS教程之利用Core Data应制止的十个毛病仓酷云

[复制链接]
蒙在股里 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:35:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
又盲看一些关于Objective-C的一些语法基础和规则。之前有一定的C和C++还有Java的基础,所以看起来还是不会很吃力的,各种语言的思想相差还是不会很大的。CoreData是苹果针对Mac和iOS平台开辟的一个框架,次要用来贮存数据。对良多开辟者来讲,CoreData对照简单动手,但很难精晓,假如没有准确的进修办法,你将很难真正了解它,更不必说精晓了。

<br>
原文:AvoidingTenBigMistakesiOSDevelopersMakewithCoreData
感激会员dingdaojun的校正。
CoreData是苹果针对Mac和iOS平台开辟的一个框架,次要用来贮存数据。对良多开辟者来讲,CoreData对照简单动手,但很难精晓,假如没有准确的进修办法,你将很难真正了解它,更不必说精晓了。良多开辟者经常在这方面犯一些毛病,而这篇文章列出了开辟者在iOS开辟过程当中利用CoreData罕见的一些毛病,并对怎样制止这些毛病举行了剖析。
1.不懂得关头术语
关于iOS开辟者来讲,会利用CoreData是一项必备妙技。没有它,良多app都不会存在。当在互联网上到处搜刮CoreData进修教程,你很简单被林林总总的术语吓倒。现实上年夜部分进修教程都起首假定你已晓得了这些术语,而假如你不懂得这些术语,那将会堕入狐疑中。以是起首要晓得关头的术语。这里有一个备忘单,能够用在进修CoreData的过程当中,这份备忘单展现了关头的词组:

<br>
在今后的进修过程当中,你会碰到更多的术语,但这些是初学者必要懂得的最基础的部分。
2.完整无视CoreData
当一项手艺以难学“出名”时,你大概会疏忽它,出格是当你工夫不敷,急着把app做出来的时分。
CoreData贮存app数据的一个罕见替换选择是利用XML属性列表,固然属性列表可让你明天的事情变得轻松,但它们也会随后回过火来咬你一口。不管什么时候你编纂属性列表,产生的变更都是原子性的。这意味着即使是很小的变动请求,全部文件城市被加载到内存中,然后在保留的时分,全部文件城市被写回到硬盘。
跟着数据量的增加,app也会变得愈来愈慢。可是假如你基于SQLite数据库利用CoreData时,这些功能成绩就不会困扰你。如许能够坚持低内存占用,以包管app疾速呼应,并避免app因内存压力过年夜而溃散。实质上说,CoreData之以是比属性类表更有扩大性的缘故原由是它撑持利用数据库举行耐久性贮存。可扩大性并非CoreData的独一上风,利用干系把数据构造进实体布局才是其壮大的地方。好比,思索利用以下实体来代表一个义务:

<br>
该义务实体包括一个称号和subtask_name属性。当从义务实体中创立办理对象时,它将会有一个称号和subtask_name属性。
不依附干系,这个数据模子仅撑持一个subtask,如今思索以下实体:

<br>
带有双箭头的线标明Taskentity能够对应多个Subtaskentity干系,这意味着一个义务能够有多个子义务,更不用说触及到的父义务也能经由过程逆干系被包括出去。这个天真性不但便利,更节俭了数据库的空间,由于父义务称号仅仅只需贮存一次。假如你想要更进一步,让义务有子义务的子义务,下一步该怎样办?思索下从头构建以下义务实体:

<br>
模子如今撑持无线深度的子义务,由于义务实体联系关系的是其自己!CoreData的可扩大性和天真性还只是其上风中很少的一部分。CoreData其实不仅仅使用干系数据库的上风,并且你不用写任何SQL语句来利用它。CoreData替你承当了义务,而且为你主动优化了天生的SQL语句。
我还没有深切研讨CoreData的其他代价方面,好比模子版本把持、迁徙、考证和变动办理和iCloud同步等等。假如有任何值得你投进工夫的iOS框架,那就是CoreData。

3.不利用模子版本把持和迁徙
假如你已编纂了一个办理对象模子,你大概已犯了以下毛病:
“此前用来翻开store的模子不兼容之前用来创立store的模子”
当你创立数据耐久化存储,它是基于一个特定的办理对象模子的。假如模子的布局产生了变更,那末耐久化存储就必需更新以婚配。假如不这么做,store将会是不兼容的,而且不克不及翻开。假如用户正利用的存储是基于你的没有利用版本把持的模子,那末app必定会溃散。
为了确保模子迁徙历程一般举行,你必要确保你在编纂模子前十分当心地增加了模子版本。
附注:一些变更,好比属性默许、无效性划定规矩和猎取哀求模板都能够被简化。
4.过量利用版本把持和迁徙
一旦开辟者懂得到保持办理对象模子版本的浅易,一些开辟者难免会太过利用。这会发生一个太过庞大化的版本汗青纪录,假如每次变动都增加版本,这只会减缓模子的迁徙。
在你公布CoreDataapp到AppStore之前,你能够疏忽版本把持,并按你喜好的那样编纂模子。为制止“thestoreisincompatible”毛病,能够复杂地从开辟设备上删除app,并再次在Xcode中运转。利用更新的模子部署一个新的耐久化贮存,就能够办理溃散成绩。一旦你把modelversion1公布到AppStore,你一切的用户将会有version1的耐久化存储。从这一点下去说,假如更新模子则必需增加一个新版本。我们假定你的用户正利用modelversion1。当开辟一个更新版的app,你已增加了modelversions2,3和4。利用以下小技能能够削减版本汗青,而不必公布modelversions2,3,4...
删除model2的内容
复制model4内容至model2
设置model2为以后model
删除model4
固然,你必要思索model1中的实体怎样映照到更主要的model2中,特别在你没有利用轻量级迁徙时。加倍具体的关于model版本把持和迁徙,可检察“LearningCoreDataforiOS”这一个完全章节。
5.把统统留在内存中
你次要存眷功效和特征,以是你很简单健忘那些不那末诱人的主题,好比坚持低内存占用。有些开辟者会在举行功能测试前急仓促地公布使用,特别是停止刻日所迫的情形下。不外还好我们仍有一些措施帮你坚持低内存占用。
当你办理对象时,在内存方面可以使用办理对象context。一旦你完成了办理对象,你应当经由过程挪用以下NSManagedObjectContext实例办法之一来移除它们。
经由过程重置来从context中移除一切办理对象。
利用refreshObject:mergeChanges并传进参数NO从context中移除特定的对象。
利用以上恣意一个办法能够确保未利用的对象没有华侈空间。为了在context中进步对象数量的可见性,可纪录[[contextregisteredObjects]count]了局以便利在把持台中调试。
6.计划一个低质量的ManagedObjectModel
假如你贮存照片、音频大概视频,你在模子计划上要非常当心。记着关头的一点是当你把managedobject带进context时,你正把一切数据一并带进内存中。比方,假如一个managedobject带有一个图象属性,该属性存储了一张很年夜的图片,同时一个表格视图利用它来创立浩瀚实体对象并添补单位格,那末app功能就会遭到影响。立即你利用一个取得了局的把持器,你仍必要一次加载良多高分率的图片,这个操纵不会立即实行。为懂得决这一成绩,持有大批对象的属性应当被决裂进一个联系关系实体。依照这个办法,大批对象能够被耐久化存储。假如你必要在tableview中展现照片,你应当利用主动天生缩略图取代。
7.不提早加载数据
当你把模子加载进一个更新的app时,要注重不要不测地加载一个基于旧模子的默许数据存储。假如你这么做了,那末对一些用户来讲,大概会在运转使用的时分招致溃散。这个威逼能够从基本上制止开辟者加载一个默许的数据存储。
假如有默许数据包括在app中,那app就更简单进修和利用了。一个程序越简单利用,那末用户就越有大概持续利用它。用户利用一款使用的工夫越长,那末用户传布它的时机就越年夜,最初也会提拔使用潜伏的发卖情形。为了不在供应默许数据的情形下呈现的更新时溃散征象,你必要一个好的测试战略。
别的,你也必要深入、正确地舆解你想把甚么样的模子版本和存储公布到AppStore。你应当部署一个未改动的AppStore使用版本到你的设备上,增加数据,然后完全测试晋级历程。
8.只利用单一的Contexts
CoreData的完成最少必要一个context在主线程上操纵。用户接口也需运转在主线程,因而任何减缓主线程的举动城市下降程序的呼应才能。固然利用一个context十分简单,可是功能成绩会寂静呈现,除非你的数据设置十分小。好比,假如你想要天生数据缩略图,大概导进一些数据,app就会这些过程当中呈现堵塞征象。
自从iOS5今后,办理多个context已变得十分简单了。如今你能够设置一个context层级,并在前台和背景运转一些contexts。经由过程设置背景context作为前台context的父类,你就能够完成背景保留。经由过程设置背景context作为前台context的子类,你就能够像导进对象一样导进context来主动更新用户接口.
9.不睬解iCloudIntegration的范围性
iOS7公布今后,CoreData集成iCloud的完成变得加倍复杂。iCloud一个关头性的限定是它的数据被束缚在一个iCloud账户中。因为iCloud账户是与用户设备的各个方面交织在一同,以是分享iCloud账户是不实在际的,不保举的。这意味着iCloud不克不及被用来共享。好比,假定一名丈夫和老婆想要在统一个购物列表上列出物品,这一点以后对iCloud来讲也是不成能的。
除账号限定,iCloud也不撑持orderedrelationships,也限定你的轻量级的model迁徙。跳出这个圈子思索,假如你对app利用的搜集剖析统计对照感乐趣,你能够思索利用Backend-as-a-Service(BaaS)。
10.不思索现有的客户数据集成iCloud
在iOS7中,iCloud集成CoreData已简单了良多,良多开辟者有信念在使用中撑持它,此前用它来托管可贵的用户数据其实不不乱。这招致了良多现有的app唯一当地贮存,好比我本人的‘Teamwork’app。
iOS7中iCloud主要的简化之一是fallbackstore的引进,它同意在iCloudaccounts和iCloudDocuments和Data之间无缝过渡。用户可使用撑持iCloud的app,即使他们没有任何收集毗连,并在有可用收集时把数据集成到iCloud中。
固然这有点难以想象,基于iOS7之前版本开辟的使用中,用于贮存用户数据的当地存储计划都应当被忘记。
假如你仅翻开iCloud,那你将利用一个分歧的贮存,而且你将必要把用户的当地数据兼并到iCloud。在你实验把用户数据集成到iCloud之前,你必要反省以下几点:
用户注册了iCloud吗?
用户想要在app中利用iCloud吗?
用户但愿把当地数据兼并到iCloud吗?

由于封闭文档写的相当好在遇到新框架的时候弄明白框架的功能去文档里搜搜框架的ProgrammingGuide很有用要弄明白框架类的继承结构写iOS的程序不一定都是用OBJC
老尸 该用户已被删除
沙发
发表于 2015-1-21 10:34:13 | 只看该作者
特别是在校的学生,都存在一个小小的尴尬——虽然学习iOS开发的热情高涨,但由于没有多余的银子购买昂贵的Mac电脑而踟蹰不前。其实,针对初学者,如果想进入iOS开发的天地
小魔女 该用户已被删除
板凳
发表于 2015-1-30 07:56:45 | 只看该作者
还有开发工具是用Xcode,是在Mac系统的,你多摸索一下就可以开发简单的应用了,建议你买一本iphone开发秘籍第二版看看,希望可以帮到你,谢谢。
乐观 该用户已被删除
地板
发表于 2015-2-5 12:13:22 | 只看该作者
中国如今已然发展成为一个软件大国,软件人才的数量跃居全球之首。当然,在苹果平台的开发领域,也保持了相当强劲的发展势头。然而,很多初入iOS开发门槛的开发者,
精灵巫婆 该用户已被删除
5#
发表于 2015-2-6 01:50:12 | 只看该作者
我也从简单的状态栏适配开始,先研究了下关于状态栏的适配,特总结如下,供广大网友一起讨论交流。
再现理想 该用户已被删除
6#
发表于 2015-2-6 07:56:03 | 只看该作者
有办法利用自己手头的电脑立刻开始这个美妙旅程的。
分手快乐 该用户已被删除
7#
发表于 2015-2-13 22:54:21 | 只看该作者
iPhone文件系统:创建、重命名以及删除文件,NSFileManager中包含了用来查询单词库目录、创建、重命名、删除目录以及获取/设置文件属性的方法(可读性,可编写性等等)。
海妖 该用户已被删除
8#
发表于 2015-3-4 02:16:13 | 只看该作者
每个行业都一样,想要一天学有所成是不可能的,一定要做好努力的准备,做ios不是简单的学会oc语言。不怕多走弯路,就怕不肯动手。
不帅 该用户已被删除
9#
发表于 2015-3-8 12:24:54 | 只看该作者
down下code4app网站的每个分类的代码挨着看
灵魂腐蚀 该用户已被删除
10#
发表于 2015-3-13 09:22:57 | 只看该作者
每个行业都一样,想要一天学有所成是不可能的,一定要做好努力的准备,做ios不是简单的学会oc语言。不怕多走弯路,就怕不肯动手。
飘灵儿 该用户已被删除
11#
发表于 2015-3-20 18:42:31 | 只看该作者
看《iPhone 4与iPad开发基础教程》,跟着一步步来
若天明 该用户已被删除
12#
发表于 2015-3-29 18:05:23 | 只看该作者
每个行业都一样,想要一天学有所成是不可能的,一定要做好努力的准备,做ios不是简单的学会oc语言。不怕多走弯路,就怕不肯动手。
愤怒的大鸟 该用户已被删除
13#
发表于 2015-4-6 19:40:09 | 只看该作者
down下code4app网站的每个分类的代码挨着看
爱飞 该用户已被删除
14#
发表于 2015-4-13 02:35:40 | 只看该作者
在百度搜索你想要了解的类名(苹果的cocoa和cocoatouch框架的类名很有特点很容易搜到,前缀都是NS or UI),看别人写的博客详解
莫相离 该用户已被删除
15#
发表于 2015-4-14 20:21:11 | 只看该作者
中国如今已然发展成为一个软件大国,软件人才的数量跃居全球之首。当然,在苹果平台的开发领域,也保持了相当强劲的发展势头。然而,很多初入iOS开发门槛的开发者,
第二个灵魂 该用户已被删除
16#
发表于 2015-4-16 22:10:42 | 只看该作者
还有开发工具是用Xcode,是在Mac系统的,你多摸索一下就可以开发简单的应用了,建议你买一本iphone开发秘籍第二版看看,希望可以帮到你,谢谢。
深爱那片海 该用户已被删除
17#
发表于 2015-4-26 22:59:35 | 只看该作者
这个办法就是在WindowsXP或Win7的电脑上,使用vmware虚拟机来搭建一个真实的Mac OS X环境。
简单生活 该用户已被删除
18#
发表于 2015-5-4 04:42:34 | 只看该作者
iPhone文件系统:创建、重命名以及删除文件,NSFileManager中包含了用来查询单词库目录、创建、重命名、删除目录以及获取/设置文件属性的方法(可读性,可编写性等等)。
活着的死人 该用户已被删除
19#
发表于 2015-5-6 19:10:50 | 只看该作者
以上可以同时进行,学习过程中尽量不要纠结细节和底层,要知道ios是封闭的、OC是高级语言,我们不可能过多地去了解它的原理,至少在新手阶段没有必要。用迭代的方式更新你的知识,而不是死抠一个知识点。
admin 该用户已被删除
20#
发表于 2015-6-23 21:49:28 | 只看该作者
近期由于IOS7的发布,所以应用的适配潮可谓是都搞的锣鼓喧天,甚是热闹,因此呢,因适配IOS7而产生的问题也是铺天盖地的卷来,
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-4-30 07:31

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表