29,031
社区成员
发帖
与我相关
我的任务
分享
inputName = [[UITextField alloc]initWithFrame:CGRectMake(10, Img.size.height + Img.size.height / 2, Img.size.width,Img.size.height)];
inputName.delegate = self;
[self.view addSubview:inputName];
[inputName release];
inputName 在初始时,它的引用计数为1,没有问题。 在这段代码末尾,你向inputName 发送了release消息,这时inputName指向的对象的引用计数为0,系统会释放该对象所占的内存,但inputName变量中还保存着UITextField对象的地址,但地址指向 的对象已经释放了,那么此时的inputName 就是一个“野指针”,它指向的内存已经不属于这个程序。 所以如果在程序的其它位置再尝试去访问这个“野指针”时就会报错了。
正确的做法是:
self.inputName =[[[UITextField alloc]initWithFrame:CGRectMake(10, Img.size.height + Img.size.height / 2, Img.size.width,Img.size.height)] autorelease];
self.inputName.delegate = self;
[self.view addSubview:self.inputName];
-(void)dealloc {
[inputName release];
inputName = nil;
[super dealloc];
}