有关以编程方式创建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的问题的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式创建的 UITextField 隐藏了其他控件

以编程方式创建 UILabel、UITextField 等时的图形错误

以编程方式在 UIView 上添加 UITextField Swift

以编程方式从 UITextField 接收 UILabel 值

如何以编程方式选择 UITextField 进行编辑

需要有关以编程方式创建自动布局约束的帮助