关于 ios:使 NSManagedObject 成为委托是一种好习惯吗? | 珊瑚贝

Is making a NSManagedObject a delegate a good practice?


任务详情:

我正在开发一个应用程序,它可以同时与 1-30 个硬件设备通信,每个设备都有自己的 tcp 连接。

因此,我创建了一个实体”hardwareObject”,它代表了该设备的一些属性,例如value1 和 value2.

我创建了一个连接处理程序类,我将其定义为我的”hardwareObject”实体的瞬态属性。在 UI 更改时,核心数据对象被修改,核心数据对象本身告诉它的连接发送 value1 或 value2 的更改。

我想在新数据通过委托方法到达时通知”hardwareObject”的实例,因此它是它的属性的委托。

我想知道是否让 NSManagedObject 成为 s.th 的代表。是个好习惯吗?

这可能会导致故障或其他与核心数据相关的问题出现问题吗?
还是我应该更好地创建一个 sharedInstance 主连接处理程序对象来处理每个连接处理程序并仅在需要时与我的核心数据对象通信?


这是一个完全有效的设计。 NSManagedObjects 可以由它们的(托管对象)上下文管理,但是如果您保留一个 NSManagedObject,它将保持有效,并且您可以自由地在该类中实现任何特殊业务逻辑或使其成为委托。事实上,Core Data 允许您将 NSManagedObject 子类化的原因之一就是您可以做这些事情。

如果您需要从上下文中删除对象,请确保将您的类取消注册为委托。

  • 您建议保留委托属性而不是分配它以保持 NSManagedObject 子类”活动”?
  • 每当您有 obj <-> delegate 关系时,您需要确保两端(obj 和委托)保持有效,只要它们彼此之间存在关系。经典方法是委托保留 obj(例如,视图控制器保留表视图)并且 obj 对委托具有弱引用(表视图对视图控制器具有弱引用)。您也可以使用它,但是您需要确保托管对象在它离开时(在 -didTurnIntoFault 内部)将自己取消设置为委托。否则你会有悬空指针。


这听起来是个坏主意。委托需要至少与他们作为委托的对象一样存在,并且您无法控制托管对象的生命周期 – 这由上下文处理。

正如您在问题中提到的那样,故障也可能是一个问题 – 任何状态信息都可能在任何时候消失,再次超出您的控制。

此外,如果您担心的话,这听起来像是对 MVC 的严重违反。

  • 这是如何违反 MVC 的?事实上,观察状态变化是 MVC 不可或缺的一部分。什么是 KVC?第一段提到模型更改观察者:developer.apple.com/library/mac/#documentation/Cocoa/Concept??ual/…。
  • 你说的是KVC吗?我说的是MVC。他们是两个完全不同的东西。
  • 我的 MVC 观点是 OP 将有效地使模型对象成为控制器的一部分。
  • 当我读到它时,我认为他的建议正好相反:让模型对象在模型发生更改时通知委托,这是非常标准的 MVC。我同意,让模型对象监视其他东西没有多大意义。
  • 我对 KVC 的观点是,如果模型对象可观察是错误的,那将不存在。


来源:https://www.codenong.com/9240344/

微信公众号
手机浏览(小程序)
0
分享到:
没有账号? 忘记密码?