ice*_*lon 1 objective-c ios synthesize
在setProgram和setGraphic方法中我们有相同的代码:
NSLog(@"%@", self.display);
Run Code Online (Sandbox Code Playgroud)
但是,输出显示self.display是空的setProgram,但它是一个UILable对象中setGraphic.
是什么导致了不同的结果?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);
}
Run Code Online (Sandbox Code Playgroud)
假设您的属性都是IBOutlets,那么最好的猜测是在XIB加载期间调用setter并在其间display设置program并graphic设置.
也就是说,由于XIB未归档,因此在重构对象时会调用setter.订单未定义.
(这让我很开心;当我第一次了解NIB装载时,我遇到了同样的困惑〜23年前.顺便说一下:你可以离开我的草坪.)
鉴于这些是出口,没有必要打电话setNeedsDisplay.实际上,你根本不应该覆盖setter.
此外,类名始终以大写字母开头.