使用自定义初始化的子类UIView - 这是理智的吗?

时间:2012-06-06 07:14:13

标签: objective-c uiview

我一直在寻找最佳实践以及诸如创建自定义,可重用的视图组件之类的东西。到目前为止,似乎是一个自定义的UIView子类。

在这种情况下,我所需要的只是一个固定大小的视图,可以轻松访问标签,而且方便的初始化程序也很棒。我可以标记标签并使用常量,但这似乎是不必要的(删除了UIKit导入的样板)(使用ARC):

// .h file
@interface MyView : UIView
@property (nonatomic, weak) IBOutlet UILabel *label;
+ (id)withText:(NSString *)text;
@end

// .m file
@implementation MyView
+ (id)withText:(NSString *)text {
    MyView *view = [[[NSBundle mainBundle] loadNibNamed:NSStringFromClass([self class])
                                                  owner:nil
                                                options:nil] objectAtIndex:0];
    view.label.text = text;
    return view;
}
@end

(编辑:更改为类方法。我的担忧仍然没有改变,虽然它总体上不那么可疑)

我的MyView.xib文件唯一的顶级元素(UIView)有一个自定义类设置为MyView,并且插座连接到FileOwner。

而且......这很有效。完美。它正确地呈现在我使用它的任何地方,没有例外,没有裁剪,没有任何有趣的业务,我可以看到。

到目前为止。我有点担心:

  1. 我还没有在任何地方看过这种技术。当然,我只是在寻找相对较短的时间(几个小时,被动地)。
  2. 我没有做任何推荐的覆盖initWithFrame:/ Coder:等等。
  3. 我现在只在一个极其有限的领域中使用它,所以它无法在附近进行良好的测试,例如视图不在视野范围内,绘图性能未知,我没有没有彻底检查内存泄漏等。
  4. 我几乎可以肯定我错过了什么。很可能我会在使用它的时候很快找到它,但我可能找不到所有这些。
  5. 有没有更多UIView体验的人比我有点想要他们的大脑?这是一个好主意吗?一个可怕的“omg wtf你在想什么”的想法?是否有惊喜等着我?关于如何创建这样的简单自定义视图,我应该阅读一些内容吗?

2 个答案:

答案 0 :(得分:1)

您应该阅读Apple docs on initializers,还有Mike Ash’s posts about them。初始化程序并不难,但有一些微妙的问题可能会让你感到困惑,因为你可以找到你当前的代码,正如评论中已经提到的那样。

答案 1 :(得分:0)

一般来说,这种技术应该没问题。由于您将类方法称为“便捷初始化器”,self引用类对象并且不会更改,因此可以在那里引用它。这不像是在初始化程序中混合自我,这更棘手,但可以正确完成。

在上面的情况中,当您从Nib加载视图时,只会调用initWithCoder:初始值设定项。