繁体   English   中英

内存访问错误:有关发行版,协议和委托的问题

[英]Memory bad acces: Questions with releases, protocols and delegates

我对内存管理有一个小疑问是iOS ...

好吧,我定义了一个拥有一个协议的视图。 在另一个类中,我创建另一个类的实例,将视图添加到其他视图,然后尝试释放实例。 由于收到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并出错。 有人知道如何释放该对象吗?

谢谢,

大卫

您在这里过度释放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方法结束时无效

您不必释放c1,而必须保留它! addSubview不保留c1实例,它仅保留其视图! 如果以后再参考c1,将会获得错误的访问权限

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM