我有两个班级:
在我的RootViewController.h
中// in .h file
UITextField* myTextField_;
@property (nonatomic, retain) UITextField* myTextField.
在我的RootViewController.m
中// in .m file
@synthesize myTextField = myTextField_
// in dealloc
[myTextField_ release]
// in viewDidLoad
UITextField* tf = [[UITextField alloc] init] initWithFrame:CGRectMake(200,6,100,30)];
[nameTextField_ = tf];
[tf release]
我的问题是, 这会造成任何内存泄漏吗?或者会崩溃吗?有没有更好的方法来创建UITextField的实例,所以我保持对它的引用?也许
myTextField_ = [[UITextField alloc] init] initWithFrame:CGRectMake(200,6,100,30)];
那就够了吗?
答案 0 :(得分:3)
最简单的方法是这样做:
·H:
UITextField *myTextField;
@property (nonatomic, retain) UITextField *myTextField;
的.m
@synthesize myTextField;
- (void)viewDidLoad {
myTextField = [[UITextField alloc] initWithFrame:CGRectMake(200,6,100,30)];
}
- (void)dealloc {
[myTextField release];
}
您将有一个以最干净的方式分配和发布的实例,您将始终引用此文本字段。
答案 1 :(得分:1)
是的,这样做:
myTextField_ = [[UITextField alloc] initWithFrame:CGRectMake(200,6,100,30)];
您也可以使用:
self.myTextField = [[UITextField alloc] initWithFrame:CGRectMake(200,6,100,30)] autorelease];
(当使用它将保留的属性时,当直接使用成员myTextField_
时,它将不会(自动)保留)。同样alloc
会将retainCount设置为1,因此最终需要发布(在dealloc
方法中,您可以使用[myTextField_ release];
或self.myTextField=nil;
);
不确定这是什么(我相信它会显示一些编译错误):
[nameTextField_ = tf];
答案 2 :(得分:1)
您不应该直接访问变量[tf release]
。
如果您通过self.
表示法访问它,则会调用[tf retain]
,然后您应该发布tf
。因此,在您当前的版本中,除了您要发布的行之外,一切都还可以。
答案 3 :(得分:1)
[nameTextField_ = tf];
变化:
[self setMyTextField:tf]