只是想知道为什么我在构建时会在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时遇到同样的错误。
答案 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
声明为实例变量。