有关以编程方式创建UITextField的问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有关以编程方式创建UITextField的问题相关的知识,希望对你有一定的参考价值。
我有两节课:
- Rutavyukontrolaraha
- Rutavyukontrolarama
在我的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)];
那会足够吗?
最简单的方法就是这样做:
。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];
}
您将有一个以最干净的方式分配和发布的实例,您将始终引用此文本字段。
当您直接访问变量时,不应该执行[tf release]
。
如果你通过self.
表示法访问它,它将被称为[tf retain]
然后你应该释放tf
。因此,在您当前版本中,除了您要发布的行之外,一切正常。
[nameTextField_ = tf];
更改:
[self setMyTextField:tf]
是的,这样做:
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];
以上是关于有关以编程方式创建UITextField的问题的主要内容,如果未能解决你的问题,请参考以下文章
以编程方式创建 UILabel、UITextField 等时的图形错误
以编程方式在 UIView 上添加 UITextField Swift