【问题标题】:Do IOS UI elements need to be weak? [duplicate]IOS UI元素需要弱吗? [复制]
【发布时间】:2016-01-04 14:36:11
【问题描述】:

当不使用界面生成器时,我总是保持对 UI 元素的强引用:

@interface myViewController : UIViewController 

@property (nonatomic, strong) UILabel *folderLabel;

然后像这样添加它们:

[self.view addSubview self.folderLabel];

初始化程序在哪里:

-(UILabel *)folderLabel{
    if(!_folderLabel) {
        _folderLabel = [[UILabel alloc] init];
        _folderLabel.text = @"foo";
    }
    return _folderLabel
}

有人告诉我,由于某种原因这很糟糕,他们应该总是很弱..

@property (nonatomic, weak) UILabel *folderLabel;

-(UILabel *)folderLabel{
    if(!_folderLabel) {
        UIlabel *folderLabel = [[UILabel alloc] init];
        folderLabel.text = @"foo";
        [self.view addSubview:folderLabel];
        _folderLabel = folderLabel;
    }
    return _folderLabel
}

强引用在这里是件坏事吗?

【问题讨论】:

  • 请注意,在该问题上投票较高的答案而不是接受的答案是正确的
  • 那个问题是指 IBoulets,这是以编程方式设置 UI 元素
  • 投票率最高的答案似乎与有关苹果建议保持强大的新信息过时了..
  • IBOutlet 只是句法修饰,让NIB绑定进程能够找到属性。元素的创建方式无关紧要

标签: ios objective-c user-interface weak


【解决方案1】:

当您将子视图添加到 self.view 时,它会被保留。一种可行的模式是分配子视图并将其存储在局部变量中,将其添加到 self.view 然后将其分配给 ivar。

【讨论】:

  • 不错,但问题是,在头文件中有强引用是不是一件坏事,会造成伤害、保留循环或内存泄漏?
  • 如果你声明它们是强的,你需要在 viewDidUnload 中将它们清零,否则它会泄漏。
  • @user3246173 不,当视图控制器被释放时,它们将被设置为 nil,这将删除强引用。
  • 是的,确实如此> ios 6.0
  • 其他地方对此进行了长时间的讨论。我应该把它标记为重复的。
猜你喜欢
  • 1970-01-01
  • 2012-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-10
  • 2010-10-09
  • 2011-03-01
  • 2011-07-08
相关资源
最近更新 更多