代码之家  ›  专栏  ›  技术社区  ›  Raptor

IBOutlet创建的不同方法

  •  0
  • Raptor  · 技术社区  · 9 年前

    IBOutlet

    方法1:in ViewController.h

    @interface ViewController : UIViewController
    @property (nonatomic, strong) UILabel *textLabel;
    @end
    

    ViewController.m

    @interface ViewController () {
        IBOutlet UILabel *textLabel;
    }
    
    @end
    

    方法3:在 ,使用 @property

    @interface ViewController () 
    @property (nonatomic, strong) UILabel *textLabel;
    @end
    

    鉴于 textLabel 必须访问&它的文本需要经常更新,哪种方法是正确的?

    2 回复  |  直到 9 年前
        1
  •  2
  •   Jacob King    9 年前

    这一切都取决于你们是否需要你们的出口可以被包含它的类之外的类访问;一般来说,我不鼓励这样做,因为让视图控制器负责更新UI,而不是将此任务传递给其他类是一种很好的做法。话虽如此, 方法3 不过,如果您确实必须从另一个类访问对象,那么只需使用 方法1

    方法2 使用IVaR而不是对象属性,并且不是声明出口的正确方法,它甚至可能导致意外行为,因此最好避免这种方法。

        2
  •  1
  •   shallowThought    9 年前

    IBOutlet .插座连接到故事板。

    这是一处房产。由于它在.h文件中,所以可以从外部访问它。的Objective-C模式 public .

    这是iVar。如果没有必要,请不要使用iVars。

    方法3

    private .

    IBOutlet出口 看起来像这样:

    @interface ViewController ()
        @property (nonatomic, weak) IBOutlet UILabel *label;
    @end
    

    这个 IBOutlet出口 简单地使属性能够连接到情节提要。它是Xcode的注释,不会改变代码的语义。


    编辑1:

    在大多数情况下,正确的设计模式是隐藏插座,因为这是一个实现细节。外部类不应直接使用视图设置数据。


    编辑2:

    为什么“如果不必使用IVaR,就不要使用”(2)

    基于意见:

    x = self.variable (财产)和 x = variable (局部变量)是。

    _ . x = _variable (iVar)。