我正在尝试制作一个简单的 iphone 应用程序,我一直在玩功能,最近,代表。我只是对内存管理感到困惑,因为显然“好代码”使我的应用程序因 exc_bad_access 而崩溃。
我有一个包含两个数据成员的对象,现在实现为空。
@implementation semester: NSObject{
NSInteger ID;
NSString *name;
}
然后我的委托方法:
- (void) receiveSemester:(semester *)newSemester {
[test setText:newSemester.name];
}
以及用作具有以下形式的表单的视图:
@interface addSemesterController : UIViewController {
id<ModalViewDelegate> delegate;
UITextField *txtName;
UILabel *prompt;
UIButton *ok;
UIButton *cancel;
}
所有对象都成为属性并在应用程序文件中合成。这是使用委托的方法:
- (IBAction) okClick:(id)sender{
// create semester object and return it
semester *created = [[semester alloc] init];
created.name = txtName.text;
[delegate receiveSemester:created];
[self dismissModalViewControllerAnimated:YES];
}
我的 dealloc 方法如下所示:
- (void)dealloc {
/*
[txtName dealloc];
[prompt dealloc];
[ok dealloc];
[cancel dealloc];
*/
[super dealloc];
}
注释掉表单中包含的对象的释放后,我的应用程序运行正常。但是,当我取消注释它们时,我在委托协议中收到 exc_bad_access 错误:
// in main view controller
- (void) receiveSemester:(semester *)newSemester {
[test setText:newSemester.name];
// test is a UILabel
}
我尝试了僵尸方法,它说标签调用了一个释放的对象。我没有在“表单”控制器中释放我的学期对象,即使我是在解除分配视图之前调用委托函数。
显然我不应该在 dealloc 方法中释放对象,我只是不清楚为什么不应该。
再次,提前感谢您的帮助。