2012-01-24 68 views
0

先生我是新的iphone我創建UITextField使用此代碼,但是當我釋放此dealloc應用程序崩潰。我想通過編碼來創建文本字段。 在此先感謝。iphone-textfield發佈導致崩潰的應用程序

#import "TextField.h" 

@implementation TextField 
UILabel *label; 
UITextField *textField; 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    //Create label 
    label = [[UILabel alloc] init]; 
    label.frame = CGRectMake(10, 10, 300, 40); 
    label.textAlignment = UITextAlignmentCenter; 
    label.text = @""; 
    [self.view addSubview:label]; 
    [label release]; 

    // Initialization code 
    textField = [[UITextField alloc] initWithFrame:CGRectMake(10, 200, 300, 50)]; 
    textField.delegate = self; 
    textField.placeholder = @"<Enter Text>"; 
    textField.textAlignment = UITextAlignmentCenter; 
    [self.view addSubview: textField]; 
    [textField release]; 
} 

- (void)dealloc 
{ 
    [textField release]; 
    [label release]; 
    [super dealloc]; 
} 

@end 
+0

你能張貼在控制檯上會崩潰嗎? – NoobMe

回答

1

您已經通過發佈您的文本字段和標籤:[textField release]; ,[label release]; 比你不應該在dealloc method.You再次釋放超過釋放你的文字申請和標籤以及引起程序崩潰。從dealloc方法中刪除它。

0

您使用兩個[textField release]地方:
1)在viewDidLoad中
2)dealloc方法
你不必這樣做有兩種放置。從viewDidLoad方法中刪除[textField release]

這是因爲當你分配一個實例時,它保留計數變成1,當你釋放它時,保留計數變成0。所以再次釋放相同的實例導致崩潰。

+0

對不起Emil,但是當我們通過addSubview添加textField時,這會讓textField保留count 2.thats爲什麼我想我們應該釋放它兩次或一次。感謝Emil爲你的答案 – priya

+0

當你將它添加到視圖然後是它保留計數將是2,但是當視圖被釋放時它釋放它的所有子視圖。所以你只需要在textField上調用release一次。 – Arslan

+0

嘿謝謝arsalan.u是正確的看法發佈所有子視圖。 – priya

0

使用此代碼...ü已經發布標籤和文本字段兩次......

#import "TextField.h" 

@implementation TextField 
UILabel *label; 
UITextField *textField; 

- (void)viewDidLoad { 
[super viewDidLoad]; 

//Create label 
label = [[UILabel alloc] init]; 
label.frame = CGRectMake(10, 10, 300, 40); 
label.textAlignment = UITextAlignmentCenter; 
label.text = @""; 
[self.view addSubview:label]; 
[label release]; 

// Initialization code 
textField = [[UITextField alloc] initWithFrame:CGRectMake(10, 200, 300, 50)]; 
textField.delegate = self; 
textField.placeholder = @"<Enter Text>"; 
textField.textAlignment = UITextAlignmentCenter; 
[self.view addSubview: textField]; 
[textField release]; 
} 

@end 
+0

嘿depeesh謝謝,但請告訴我一件事,當我們在視圖中添加文本字段textField的保留計數器成爲2.so保留計數器我們應該釋放它兩次。 – priya

+0

Objective-C使用兩種方法保留和釋放。在Objective-C中,每個對象都有一個內部計數器,用於跟蹤對象或對象所使用的所有引用。 [對象保留]將計數器加1並且[對象釋放]將計數器遞減1.當計數器達到零時,dealloc將被調用。 – Deepesh