gpt4 book ai didi

objective-c - 按钮setHidden在iOS 5中崩溃

转载 作者:行者123 更新时间:2023-12-03 17:46:05 27 4
gpt4 key购买 nike

大家。我在 View 中添加了一个按钮,并将其设置为在特定条件下隐藏。虽然它只是第一次崩溃,但我还是在iOS5中加载了整个项目。第一次之后,它运行良好。 Xcode除了Thread1之外没有给我更多信息...我想知道是否有人可以提供帮助。谢谢前进。

这是一些代码。

testView.h

@property (nonatomic, retain) UIButton *testBtn;

testView.m
@synthesize testBtn;

-(id)init
{
self = [super init];
if (self) {
testBtn = [UIButton buttonWithType:UIButtonTypeCustom];
}
return self;
}
- (void)layoutSubviews{
testBtn.frame = CGRectMake(110, 100, 100, 24);
[testBtn setHidden:YES];
[self addSubview: testBtn];
}

testViewController.m
-(void)requestForSth{
[testView.testBtn setHidden:NO]; //Thread1: EXC_BAD_ACCESS(code=1,address=0x809a3345)
}

最佳答案

嗯,EXC_BAD_ACCESS表示您试图访问无效的内存。
-init方法中,您将testBtn分配给自动释放的UIButton对象。

我相信,如果此文件是在没有ARC的情况下编译的,那么这很有道理。
为什么?因为所有权语义在执行直接分配时不适用。仅通过设置方法可以应用正确的所有权语义。

在ARC下,默认情况下使用__strong所有权限定符可以解决此问题。如果您仍然坚持不迁移到ARC,则可以在直接将retain分配给实例变量之前简单地对其进行UIButton编码。

仔细看看您的代码:

- (id)init {
self = [super init];
if(self) {
//you can explicitly retain it
testBtn = [[UIButton buttonWithType:UIButtonTypeCustom] retain];
//or route it through your setter method
[self setTestBtn:[UIButton buttonWithType:UIButtonTypeCustom]];
}
return self;
}

关于objective-c - 按钮setHidden在iOS 5中崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17208116/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com