0

谁能告诉我这行代码是做什么的?

self.viewController = [[MainViewController alloc] init];

viewController 已经是一个 CDVViewController 对象,所以我不太确定它对 MainViewController 做了什么:S?

任何帮助都会很棒

谢谢

4

2 回答 2

0

首先它创建并初始化一个 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

根据您的代码,以避免泄漏。

于 2012-10-16T09:29:47.703 回答
0

这一行简单地创建了一个新对象,MainViewController 类的实例,并将其指针存储在变量 viewController 中。

于 2012-10-16T08:41:22.023 回答