属性中的UILabel未初始化

时间:2012-12-25 01:06:32

标签: iphone xcode ios6

我创建了一个属性

 @property (weak,nonatomic) UILabel *vishalSays;

然后我尝试初始化属性,如下所示:

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.vishalSays = [[UILabel alloc] initWithFrame:CGRectMake(30, 100, 200, 44)];
    [self.vishalSays setText:@"Hello World"];
    [self.view addSubview:self.vishalSays];
}

但是上面的代码没有在iPhone模拟器中显示标签。将代码更改为以下内容时:

- (void)viewDidLoad
{
    [super viewDidLoad];
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(30, 100, 200, 44)];
    self.vishalSays = label;
    [self.vishalSays setText:@"Hello World"];
    [self.view addSubview:self.vishalSays];
}

然后“Hello World”标签变得可见。有人可以解释为什么两种语法之间存在行为差异? 谢谢 维沙尔

1 个答案:

答案 0 :(得分:0)

我认为这是因为您的属性设置为weak。您可以将其更改为strong(首选),或在初始化周围添加retain块(不确定这是否有效,而不是在计算机上进行测试)。

如果您正在使用ARC,则不会保留初始化,因为没有任何人拥有该实例。

有关详情,请参阅:https://stackoverflow.com/a/11013715/785791