有关以编程方式创建UITextField的问题

问题描述 投票:0回答:4

我有两节课:

  • 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)];

那会足够吗?

iphone ios
4个回答
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
投票

当您直接访问变量时,不应该执行[tf release]

如果你通过self.表示法访问它,它将被称为[tf retain]然后你应该释放tf。因此,在您当前版本中,除了您要发布的行之外,一切正常。


1
投票

[nameTextField_ = tf];


更改:

[self setMyTextField:tf]


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];

© www.soinside.com 2019 - 2024. All rights reserved.