我对内存管理有一个小问题是iOS ...
我定义了一个拥有一个协议的视图。在其他类中,我创建了另一个类的实例,我将视图添加到其他视图然后,我尝试释放de实例。当我调用协议的方法时出现问题,因为我收到BAD_ACCS错误。它是这样的:
- (void)viewDidLoad{
Class1 *c1 = [[Class1 alloc]init];
[c1 setDelegate:self];
[self.view addSubview:c1.view];
[c1 release];
}
- (void)methodOfProtocolClass1 {
NSLog(@"c1 method called")
}
Class1有一个按钮,当我按下它时,我调用methodOfProtoclClass1并发出错误。有谁知道如何发布这个对象?
谢谢,
大卫
答案 0 :(得分:1)
你在这里过度释放c1 ......
- (void)viewDidLoad{
Class1 *c1 = [[Class1 alloc]init]; //allocates Class1 instance with +1 ref count
[c1 setDelegate:self];
[self.view addSubview:c1.view];
[c1 release]; //releases c1, ref count goes to 0 and the memory is reclaimed later
}
因此你得到了错误的访问权限,c1的实例已经消失,并且在viewDidLoad方法结束时无效
答案 1 :(得分:0)
您不必释放c1,而是必须保留它! addSubview 不保留c1实例,只保留其视图!如果您稍后参考c1,您将获得错误访问