首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

储存篇 - CoreData使用大全

【四】使用系统自动创建的CoreData ? ? 系统帮我们AppDelegate创建了一个NSPersistentContainer实例,以及一个saveContext方法。...【五】关于CoreData的版本迁移 应用场景:修改了实体的数据结构(比如说某个实体增加了一个特性),因为APP版本更新后沙盒中的NSDocumentDirectory 的缓存数据都不会被清除,这时候就要进行版本迁移了...Core Data不会根据实体的关联关系立即获取相应的关联对象,比如通过Core Data取出Person实体时,并不会立即查询相关联的Card实体;当应用真的需要使用Card时,才会查询数据库,加载...但是使用过程中会出现大量代码, 而且CoreData学习曲线比较陡峭,如果掌握不好,使用过程很容易造成其他问题。...并且MagicalRecord降低了CoreData的使用门槛, 不用去手动管理之前的PSC、MOC等对象。

2.5K20

iOS面试题梳理(二)

Objective-C 如何实现 KVO 1.注册观察者(注意:观察者和被观察者不会被保留也不会被释放) - (void)addObserver:(NSObject *)observer forKeyPath...当我们调用一个静态方法时,需要对对象进行 release 吗不需要,静态方法(类方法)创建一个对象时,对象已被放入自动释放池。自动释放池被释放时,很有可能被销毁。.... 2.模块内的 static 全局变量可以被模块内所用函数访问,但不能被模块外其它函数访问. 3.模块内的static函数只可被这一模块内的其它函数调用,这个函数的使用范围被限制声明. 4.的...7.CoreData的介绍: CoreData是面向对象的API,CoreData是iOS中非常重要的一项技术,几乎在所有编写的程序CoreData都作为数据存储的基础。...3.提供NSFetchResultsController类用于管理表视图的数据,即将Core Data的持久化存储视图中,并对这些数据进行管理:增删查改。

1.2K101
您找到你想要的搜索结果了吗?
是的
没有找到

Objective-C面试的常见问题

不容易复制的特性,更容易地添加任务的依赖关系使用NSOperation,并且可以很方便地取消一个NSOperation的执行 ---- 3、CoreData 和 数据库的区别 CoreData是数据持久化存储的最佳方式...但是CoreData最重要的特点是:CoreData不仅是一种加载、保护数据的框架,它还能跟内存的数据很好的共事。 ---- 4、响应者链 响应者链表示一系列的响应者对象。...一般来说,第一响应者是视图对象或者其子类对象,当其被触摸后事件由他自己处理,如果它不处理,事件就会被传递给他的视图控制器处理,然后是它的父视图(super View)对象,以此类推,直到顶层视图,接下来会沿着顶层视图...一般情况下,响应者链,只要有对象处理事件,事件就停止传递,但有时候,可以视图响应的方法根据一些条件判断来决定是否需要继续传递事件。...一定是一个类方法 一定有返回值 返回值类型 (id, instancetype) 便利构造器:+号方法 和自定义初始化方法的区别 自定义初始化方法init) 初始化+赋值 遍历构造器: 开辟空间+

59630

iOS开发之表视图爱上CoreData

就举一个IOS开发的经典的demo:通讯录来说明问题。 1.TableView没遇到CoreData的时候我们怎么通过动态表视图来显示我们的通讯录的内容呢?...,点击添加按钮时首先得通过上下文获取我们的实体对象,获取完实体对象后再给实体对象的属性赋上相应的值,最后调用上下文的save方法来存储一下我们的实体对象。...往sqlite添加数据,要想在我们的TableView显示还需要通过CoreData把我们的存储sqlite的数据来查询出来,再用CoreData给我们提供的方法把查询结果做一个转换,转换成适合...return YES; } ​    b.开启编辑功能以后我们就可以tableView的对应的方法来实现删除功能啦,当点击删除时,我们需呀获取cell对应的索引CoreData的实体对象,然后通过上下文进行删除...3.之前保存的ViewController如果Person为空,说明是执行的添加记录的方法我们就生成一个新的person, 如果Person不为空则不新建Person对象,直接更新完保存。

2.1K80

【IOS开发进阶系列】APP性能优化专题

1 优化资源文件         iOS本地资源文件编译后放置与应用程序包(Bundle)文件即.app文件。...$ afconvert -f caff -d LEI16 Fx08822_cast.wav 1.2    图片格式优化 创建UIImage对象方法的优化 + imageNamed:类级构造方法方法会在内存建立缓存...Segue定义的两个视图控制器的导航关系,也来维护和管理下一个视图控制器的延迟加载时机,这种情况下我们无法“插手”视图控制器的延迟加载。...2.2.2  nib文件延迟加载         相当于故事板而言nib要灵活的很多,nib文件有两种:一种是描述视图控制器的,另一种是描述视图的,加载方式有所区别。...Objective-C可以调用函数sqlite3_exec实现设置,语句如下: sqlite3_open(DATABASE, &db); sqlite3_exec(db, "PRAGMA synchronous

23620

实时切换 Core Data 的云同步状态

设置为 true ,即可实现数据视图上下文中的自动合并,而无需对 Persistent History Tracking 创建的 Transaction 做处理。...( CKRecordType、记录令牌等 )备份本地的 SQLite ,并提供鉴权 API 供开发者调用。...由于应用中所有的数据操作仅在 NSPersistentContainer 上进行,因此在运行实时切换同步状态并不会对数据的安全性和稳定性造成影响。...return container}()这种方法 掌握 Core Data Stack7 一文的内存模式章节也有应用将 NSPersistentCloudKitContainer 声明为可选值通过将用于网络同步的...我们需要在 NSPersistentContainer 实例对该通知进行响应,并将同步数据合并到当前的视图上下文中。

1.4K20

iOS两年前的面试题总结,现在的你掌握了嘛?

:(NSInteger)section 原本属于NSIndexPath的方法,但因为这个方法经常使用的表的时候调用、跟表的关系特别密切,因此把这个方法一类别的形式、声明UITableView.h。...SDWebImage原理 调用类别的方法: 从内存(字典)找图片(当这个图片在本次程序加载过),找到直接使用; 从沙盒中找,找到直接使用,缓存到内存。 从网络上获取,使用,缓存到内存,缓存到沙盒。...OC是否有二维数组,如何实现二维数组 OC没有二维数组,可通过嵌套数组实现二维数组。 LayoutSubViews什么时候被调用? 当View本身的frame改变时,会调用这个方法。...如果我们没有手动调用[NSRunLoop currentRunLoop]的话,就不会去查询是否存在当前线程的RunLoop,也就不会加载,更不会创建。...延迟加载:对于不应该使用的数据,使用延迟加载方式。对于不需要马上显示的视图,使用延迟加载方式。比如,网络请求失败时显示的提示界面,可能一直都不会使用到,因此应该使用延迟加载

1.1K20

iOS,面试必看,最全梳理

:(NSInteger)section 原本属于NSIndexPath的方法,但因为这个方法经常使用的表的时候调用、跟表的关系特别密切,因此把这个方法一类别的形式、声明UITableView.h。...SDWebImage原理 调用类别的方法: 从内存(字典)找图片(当这个图片在本次程序加载过),找到直接使用; 从沙盒中找,找到直接使用,缓存到内存。 从网络上获取,使用,缓存到内存,缓存到沙盒。...OC是否有二维数组,如何实现二维数组 OC没有二维数组,可通过嵌套数组实现二维数组。 LayoutSubViews什么时候被调用? 当View本身的frame改变时,会调用这个方法。...如果我们没有手动调用[NSRunLoop currentRunLoop]的话,就不会去查询是否存在当前线程的RunLoop,也就不会加载,更不会创建。...延迟加载:对于不应该使用的数据,使用延迟加载方式。对于不需要马上显示的视图,使用延迟加载方式。比如,网络请求失败时显示的提示界面,可能一直都不会使用到,因此应该使用延迟加载

1.2K30

揭秘 SwiftData 的数据建模原理

SwiftDataKit:让你在 SwiftData 中使用 Core Data 的高级功能[3] 一文,我介绍了如何调用 SwiftData 元素背后对应的 Core Data 对象的技巧。...这样,初始化方法可以直接对计算属性赋值,它会转化成对应的存储属性的初始化值。...这意味着调用本 init 访问器初始化 timestamp 之前,必须先初始化 _$backingData。...从上面的注册方法可以得知,开发者必须显式调用持久化属性的 set 方法,才能让观察者获取到数据变化的通知(调用 withObservationTracking 的 onChange 闭包)。...请注意,使用上述的 set 方法(例如:setValue)给属性设置新的值将会绕过 Observation 框架,属性订阅者将无法得到属性发生变化的通知(视图不会自动刷新)。

33220

iOSCoreData数据管理系列四——进行数据与页面的绑定

iOSCoreData数据管理系列四——进行数据与页面的绑定 一、引言     在上一篇博客,我们讨论了CoreData框架添加与查询数据的操作,事实上,大多数情况下,这些数据都是由一个UITableView...表视图进行展示的,因此,CoreData框架还未开发者提供了一个类NSFetchedResultsController,这个类作为桥接,将视图与数据进行绑定。...initWithFetchRequest:managedObjectContext:sectionNameKeyPath:cacheName:方法,如果设置第三个参数,则会以第三个参数为键值进行数据的分区...四、将数据变化映射到视图 //数据将要改变时调用方法 - (void)controllerWillChangeContent:(NSFetchedResultsController *)controller...{     //开启tableView更新预处理     [[self tableView] beginUpdates]; } //分区数据改变时调用方法 - (void)controller:(NSFetchedResultsController

69510

【IOS开发高级系列】CoreData专题

一般我们无需与它直接打交道来读写文件,Managed Object Context 背后已经为我们调用 Persistent Store Coordinator 做了这部分工作。...NSPersistentDocument 常用方法 -managedObjectContext返回文档的 Managed Object Context,多文档应用程序,每个文档都有自己的 Context...-setSortDescriptors:设置查询结果的排序方法 -setAffectedStores:设置可以在哪些数据存储查询 2 CoreData PG概述     Using the Core...想要更新大量数据,我们往往要将大量修改后的NSManagedObject 加载到 NSManagedObjectContext 并保存,这会占用大量内存,试想想在iPhone这样的内存有限的移动设备上将是个灾难...需要注意的是,由于 NSBatchUpdateRequest 并不会先将数据存入内存,而是直接操作数据库,所以并不会引起NSManagedObjectContext的同步更新,所以你不仅需要获取NSBatchUpdateResult

41050

如何在 Core Data 中进行批量操作

批量操作的使用方法 官方文档并没有对批量操作的使用方法进行过多的讲解,苹果为开发者提供了一个持续更新的 演示项目[3] 来展示它的工作流程。...下文中会详细说明 将变化合并到视图上下文 由于批量操作是直接在持久化存储上完成的,因此必须通过某种方式将变化后的数据合并到视图上下文中,才能将变化 UI 上体现出来。...对所有发生变动的 item 进行验证 ( 调用 Item 的 validateForUpdate 方法的自定义验证代码以及模型编辑器定义的验证条件 ),如验证失败则抛出错误 调用所有需要更新的托管对象...批量操作为什么快 上面使用传统的方式实现的功能与本文之前介绍的批量更新代码完全一样。那么 Core Data 使用批量更新代码时的内部操作过程是如何的呢?...批量操作为什么省 对于更新和删除操作来说,由于批量操作无须将数据提取到内存( 上下文、行缓存 ),因此整个操作过程几乎不会造成什么内存的占用。

1.8K30

2018 - iOS 面试题汇总一般面试题BAT面试题

对于子线程来说,runloop是懒加载的,只有当我们使用的时候才会创建,所以子线程用定时器要注意:确保子线程的runloop被创建,不然定时器不会回调。...13 介绍下layoutSubview和drawRect layoutSubviews调用情况 init初始化UIView不会触发调用 addSubview会触发调用 改变view的width和...而使用NSURLSessionUploadTask下载文件,会默认下载到沙盒中的tem文件不会出现内存暴涨的情况,但是在下载完成后会把tem的临时文件删除,需要在初始化任务方法时,completionHandler...如果可以尽量使用HTTPS,可以有效的避免接口数据传输中被攻击。 35.main()之前的过程有哪些 iOS main.m 是我们所熟悉的程序入口。但是在在此之前其实程序以及做了很多事了。...如系统会获取dyld的路径,并加载加载程序的依赖库。调用所有的+ load方法,并返回main函数地址。

6.4K30

Core Data 基础

Core Data Core Data 不仅是一个加载、保存数据的框架,还可以: 实体与 SQLite 的 Table 对应 无需编写任何 SQL 语句 通过谓词指定查询条件 Core Data 是一套非常成熟的框架...—> show in Finder —>test文件夹下新建一个DataModel文件夹 —>将文件夹拖入到项目的文件列表 2、选择xcddatamodeld->选择菜单 Editor / Create...代理方法内实现修改数据 (2) viewDidLoad方法 设置代理 第 7 步:删除 获取要删除的 实体描述 让管理上下文删除对象 —— 从内存删除 保存对数据的操作 —— 从数据库删除...Core Data Core Data 不仅是一个加载、保存数据的框架,还可以: 实体与 SQLite 的 Table 对应 无需编写任何 SQL 语句 通过谓词指定查询条件 Core Data 是一套非常成熟的框架...代理方法内实现修改数据 (2) viewDidLoad方法 设置代理 第 7 步:删除 获取要删除的 实体描述 让管理上下文删除对象 —— 从内存删除 保存对数据的操作 —— 从数据库删除

88430

Ask Apple 2022 与 Core Data 有关的问答

SwiftUI ,我们通常会使用 environment 为视图树注入视图上下文,一旦 loadPersistentStores 出现错误导致 container 无法正常创建,那么调用上下文的注入将会失败...我的应用程序是否有任何方法可以重置数据的本地缓存副本以假装它是新设备并让 CoreData 再次从云中获取所有数据?...如果 Widget 遇到需要迁移的 CoreData Store,则 Widget 应重定向以启动应用程序。实际上,小部件永远不会从操作系统获得足够的资源来完成迁移。...当从存储获取数据时,这两个选项是否都会被加载到内存?或者支持懒加载( fault )?不确定哪个更好用。A:两者会有相同的内存状况。理想情况下的答案是“两者都不是好的选择” 。...阅读 [ Core Data 查询和使用 count 的若干方法]( Core Data 查询和使用 count 的若干方法 " Core Data 查询和使用 count 的若干方法")

2.8K20
领券