为什么不同的集合合方法中的相同代码工作方式不同?

时间:2013-09-01 15:33:04

标签: ios objective-c synthesize

setProgramsetGraphic方法中,我们使用相同的代码:

NSLog(@"%@", self.display);  

但输出显示setProgram中的self.display为 null ,但setGraphic中的 UILable对象

导致不同结果的原因是什么?display是IBOutlet而program是NSArray对象。虽然program是SOGraphicViewController的模型,但我将通过[segue.destinationViewController setProgram: self.brain.program]从另一个控制器传递程序的值。

@interface SOGraphicViewController ()
@property (nonatomic, weak) IBOutlet graphicView *graphic;
@end

@implementation SOGraphicViewController

@synthesize program = _program;
@synthesize graphic = _graphic;
@synthesize display = _display;

- (void)setProgram:(id)program {
    _program = program;
    [self.graphic setNeedsDisplay];
    NSLog(@"%@", self.display);
}

- (void)setGraphic:(graphicView *)graphic {
    _graphic = graphic;
    self.graphic.dataSource = self;
    NSLog(@"%@", self.display);
}

1 个答案:

答案 0 :(得分:8)

假设您的属性都是IBOutlets,那么最好的猜测是在XIB加载期间调用setter并在displayprogram之间设置graphic被设定。

也就是说,由于XIB未归档,因此在重构对象时会调用setter。订单未定义。

(这让我很开心;当我第一次了解NIB装载时,我遇到了同样的困惑〜23年前。顺便说一下:你可以离开我的草坪。)

鉴于这些是出口,没有必要致电setNeedsDisplay。实际上,你根本不应该覆盖setter。

此外,班级名称始终以大写字母开头。