释放视图对象

时间:2011-03-17 03:30:41

标签: iphone objective-c uiview dealloc

只是想知道为什么我在构建时会在dealloc中收到'baseView'未声明的错误。

CGRect baseFrame = CGRectMake(0, 0, 320, 480);
UIView *baseView = [[UIView alloc] initWithFrame:baseFrame];
self.view = baseView;

- (void)dealloc {
[baseView release];
[super dealloc];

}

我使用alloc创建了视图,我不知道为什么我在尝试发布baseView时遇到错误。 (我在viewDidUnload中尝试将其设置为nil时遇到同样的错误。

4 个答案:

答案 0 :(得分:2)

因为.h文件中未声明“baseView”是我的猜测。指针仅存在于声明它的方法的生命周期中。

您可以按照以下方式解决此问题:

CGRect baseFrame = CGRectMake(0, 0, 320, 480);
UIView *baseView = [[UIView alloc] initWithFrame:baseFrame];
[self.view addSubview:baseView];
[baseView release];

视图将保留baseView,因此您可以继续在此处发布它。然后删除dealloc中的引用。

答案 1 :(得分:1)

baseView指针在本地以您创建的方式声明。如果您还需要在其他方法中使用baseView,我建议您将其添加为实例变量。< / p>

// MyClass.h
@interface MyClass {
    UIView *baseView; // declare as an instance variable;
}

@end

// MyClass.m
#import "MyClass.h"

@implementation MyClass

- (void)someMethod {
    baseView = [[UIView alloc] initWithFrame:..];
}

- (void)someOtherMethod {
    // baseView is accessible here
}

- (void)yetAnotherMethod {
    // baseView is accessible here too
}

@end

答案 2 :(得分:0)

尝试使用

[self.view addSubView:baseView];
[baseView release];

如果要从dealloc发布,则需要在.h文件中声明

答案 3 :(得分:0)

baseView被声明为局部变量并且是已知的,或者只能通过声明它的方法来访问。如果必须通过类的其他方法访问它,请确保将baseView声明为实例变量。