Self.view在iPhone中调用viewDidLoad

时间:2012-07-06 06:13:30

标签: iphone objective-c xcode

我是iPhone开发的新手。请帮帮我

我有一个视图控制器调用方法来自NSObject类的后台视图控制器当方法调用时我正在创建一个视图我写了self.view addSubview:view后这行我的视图加载了调用试。

我不知道为什么会出现这个问题,请帮我这里是我的代码。

NSObject.m

- (void) showModalMessage:(NSString *)mes
{
  self = [super init];
        if (self) {
            objViewController = [[ViewController alloc] init];
        }
    [objViewController showPopUp:mes];
}

ViewController.m
- (void) showPopUp:(NSString *)mes
{

    labelView = [[UIView alloc] initWithFrame:CGRectMake(470, 740, 380, 50)];
    [self setLabelViewSettings];
    label = [[UILabel alloc] initWithFrame:CGRectMake(20, 8, 340, 30)];
    [self setLabelSettings];
    [labelView addSubview:label];
    [label release];
    [self.view addSubview:labelView];// After This line View did load calls again 
    [labelView release];

    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:0.6];
    [UIView setAnimationDelegate:self];
    [UIView setAnimationDidStopSelector:@selector(hide)];
    [UIView commitAnimations];
}

抱歉我的英文不好请帮帮我

1 个答案:

答案 0 :(得分:4)

只要视图控制器将其视图加载到内存中,UIViewController的子类就会自动调用viewDidLoad。视图控制器仅在需要时加载其视图。因此,[self.view addSubview:labelView] self.view导致视图被加载到内存中并且viewDidLoad被调用。紧接在此行之前,view属性必须为nil,并且使用self.view访问view属性会自动将视图加载到内存中,如UIViewController Class Reference中所述。

请注意viewDidLoad可以多次调用,因为视图控制器可以在低内存情况下卸载视图并将其视图属性设置为nil。您需要确保viewDidLoad可以安全地多次呼叫。

正如jrturton指出你将self设置为showModalMessage:中的新对象,这是错误的。这可以保证当您到达showPopUp:时,新创建的ViewController对象尚未加载其视图,因此当您点击viewDidLoad时,您将始终致电self.view