创建自定义 UIView 时,您应该为该自定义 UIView 创建实例变量还是只使用参数

问题描述 投票:0回答:1

我不是全职 iOS 开发人员,所以这个问题的答案可能非常明显。我有一个名为 MenuHeader 的模型,并创建了一个名为 MenuHeaderView 的自定义 UIView。我有这样的方法:

在 MenuHeaderView.m

-(id) initWithFrame:(CGRect)frame menuHeader:(MenuHeader *)menuHeader
{
    self = [self initWithFrame:frame];
    if (self) {
        _menuHeader = menuHeader; // <- here's the part I'm asking about
        NSLog(@"here is menu header depth: %i", _menuHeader.depth);
        NSLog(@"here is my header depth as argument %@", menuHeader.depth);

一般情况下,我一般会创建一个名为_menuHeader的实例变量,在initWithFrame中赋值即可。我想我可以只处理参数 menuHeader 但我总是前者这样做。这是不必要的吗?是否有任何理由只使用 menuHeader 参数?我认为这只是风格上的,我更喜欢这个想法是我们正在展示的模型的本地 instanceVariable。两种不同的方式有什么区别吗?

ios ios7
1个回答
2
投票

实例变量的目的是在later周围使用它,用于某些other方法或(如果通过访问器公开)供其他对象访问。

  • 如果你不需要它 - 也就是说,如果你使用传入的

    menuHeader
    参数纯粹是这个
    init
    方法的本地 - 你应该 not 使用实例变量,因为它毫无意义。

  • 但是,反过来——如果你需要这个传入的

    menuHeader
    参数值到 persist 以便稍后通过其他方法访问 - 那么你 should 使用实例变量,因为传入的
    menuHeader
    参数是纯本地的,当
    init
    方法完成时将死亡(超出范围)。

通常,编写自己的

init
方法的真正原因正是为了接受参数并将其分配给实例变量,这就是为什么我们经常看到这种模式。

© www.soinside.com 2019 - 2024. All rights reserved.