谁能告诉我这行代码是做什么的?
self.viewController = [[MainViewController alloc] init];
viewController 已经是一个 CDVViewController 对象,所以我不太确定它对 MainViewController 做了什么:S?
任何帮助都会很棒
谢谢
谁能告诉我这行代码是做什么的?
self.viewController = [[MainViewController alloc] init];
viewController 已经是一个 CDVViewController 对象,所以我不太确定它对 MainViewController 做了什么:S?
任何帮助都会很棒
谢谢
首先它创建并初始化一个 MainViewController* 对象,然后将其分配给 [self setViewController: ]。self.viewController 实际上是对 self setter 方法的调用,而不是简单的指针赋值(不像 viewController = [[MainViewController alloc] init],如果 viewController 不是 ivar)。
取决于您使用 @property 语句生成 setter 的方式,但假设它是
@property(nonatomic, retain)*UIViewController viewController
您可以免费获得一个生成的 setter 方法,创建方式如下:
- (void)setViewController:(UIViewController*)controller{
if(viewController != controller){
[viewController autorelease];
viewController = [controller retain];
}
}
因此,如果您的 viewController 是一个 CDVViewController* 对象,它现在正在与一个新的 CDVViewController* 对象交换。CDVViewController* 现已发布,CDVViewController 被保留并分配给 viewController ivar。
顺便说一句,如果你刚刚完成作业,你应该这样做:
[viewController release]; // if it was before a CDVViewController
self.viewController = [[MainViewController alloc] init];
有保留财产
self.viewController = [[[MainViewController alloc] init] autorelease]; // it will be retained in the setter, so you must free it
根据您的代码,以避免泄漏。
这一行简单地创建了一个新对象,MainViewController 类的实例,并将其指针存储在变量 viewController 中。