gpt4 book ai didi

iphone - UIView 保存有关模型(业务对象)的信息有多糟糕

转载 作者:行者123 更新时间:2023-12-01 19:16:04 26 4
gpt4 key购买 nike

这个问题是针对 iOS 开发的。

假设您使用 UITableViewUITableViewCells 内您通过一个更复杂的类来显示有关您的一个或多个应用程序业务对象的信息,我们将其称为 ComplexBOView .

现在您想在用户点击您的UITableCellView 中包含的此 View 时触发特定操作。 (该事件可以通过 UITapGestureRecognizer 触发)

大多数时候,被认为是“最佳实践”的是使用 tag UIView 的属性(property)实际返回您的模型并检索正确的业务对象。

这通常是合适的,但在某些情况下,保存指向用于构建 ComplexBOView 的业务对象的指针会非常方便。 .

@interface ComplexBOView : UIView
{
UILabel* lblSummary;
// ....

UITapGestureRecognizer* tapGesture;
NSObject* businessObject_;
}

@property (nonatomic, readonly) UITapGestureRecognizer* tapGesture;
@property (nonatomic, assign) NSObject* businessObject;

这背后的想法是,当用户点击 View 时,实际上直接返回到 businessObject。

这里有两个问题
  • 在 UIView 中有 NSObject* 信息真的很糟糕吗?
  • 是否应该保留此信息,这意味着 View 和模型之间的关系在这里变得更加牢固( View 对对象的所有权)?

  • 谢谢你的建议。

    最佳答案

    一般建议是

    Views don't own data!



    这是一个很好的建议。从长远来看,它可以为您省去很多麻烦。但是 是什么意思?拥有意思是?如果您查看 UIButtonUILabel , 按钮有 title标签 a text属性(property)。所以他们持有一些数据,他们必须 - 替代方案必须有一个代表,每次绘制时都被要求提供文本。

    那么在你的情况下这意味着什么?那要看情况了。如果您的 ComplexBOView只是专门为 设计的通用 View 展示您的特定业务对象,将该对象保存在它的属性中并不是最糟糕的(只是我的观点)。

    当然,您失去了使用不同模型轻松重用该 View 的可能性,但也许无论如何这不是一个选择,因为它是如此具体。当然,您可以将所有代码从 ComplexBOView 中移出。到 Controller 。但是正如您所说,您还必须在每个模型对象和适当的 View 之间保持连接。 (顺便说一句。我不会使用 tag 来做到这一点,最好只使用 `NSDictionary 代替)

    另一方面,特劳西和迈克尔确实有有效的观点。如果你这一次打破了这个“规则”,你可能会在其他任何场合都放松并打破它,在你意识到之前,你最终会得到很多自定义 View ,每个 View 都包含对模型某些部分的引用。从长远来看,您可能会对模型进行更改(可能以您一开始没想到的方式 - 相信我, 会更频繁地发生)然后你必须去每个子类并调整它们。当然,如果特定于模型的代码存在于您的 Controller 中,您还必须修改所有这些,但至少它们都在一个地方。

    总而言之,这些最佳实践、建议和设计模式的存在是有充分理由的。它们在无数情况下证明自己是有用的。所以总的来说,你只要跟着他们就行了。然而,在某些情况下可能值得违反它们,但您必须有一些非常好的理由,并且您应该意识到后果。

    归根结底,这是你的代码、你的设计、你的决定。也许你猜错了,但有些教训必须通过艰难的方式学习。下次你知道该怎么做,更重要的是, 为什么 .创造自己的经验总是很有值(value)的。

    关于iphone - UIView 保存有关模型(业务对象)的信息有多糟糕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13287499/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com