gpt4 book ai didi

ios - 初始化后对 NSString 有 EXC_BAD_ACCESS

转载 作者:行者123 更新时间:2023-11-29 00:22:30 28 4
gpt4 key购买 nike

我使用传入参数 NSString * 创建一个设计器初始值设定项在我的类(class)中,我有属性 NSString* title。

@property (nonatomic) NSString *title;
...
- (instancetype)initWithTitle:(NSString*)title albumCover:(UIImage *)img {
self = [super init];
if (self) {
self.title = [[NSString alloc] initWithFormat:@"%@",title];
self.img = img;
}
return self;
}

使用变量 self.img 一切都很好,但是使用 self.title 我有问题。如果我想记录 self.title,我会收到错误:执行被中断,原因:EXC_BAD_ACCESS(代码=2,地址=0x16fcbbff0)。进程已经返回到表达式求值前的状态。我尝试在分配之前进行初始化,并尝试使用 NSMutableString。总是同样的事情。我做错了什么?

最佳答案

作业不是您的问题。问题出在别处。虽然属性声明和初始化不遵循推荐的模式,但它们不会导致您显示的代码崩溃。

例如,以下运行良好。您应该将您的 @property 声明为 copy 并直接分配给实例变量(这样做可以避免在您稍后使用业务逻辑实现自定义 setter 时可能出现的任何问题需要一个完全初始化的对象)。

@interface Fo:NSObject
@property (nonatomic) NSString *wrongWay;
@property (nonatomic, copy) NSString *rightWay;
@end

@implementation Fo
- (instancetype)initWithTitle:(NSString*)title
{
self = [super init];
if (self) {
self.wrongWay = [[NSString alloc] initWithFormat:@"%@",title];
_rightWay = [title copy];
}
return self;
}
@end

int main(int argc, const char * argv[]) {
@autoreleasepool {
Fo *f = [[Fo alloc] initWithTitle:@"Fo"];
NSLog(@"%@ %@ %@", f, f.wrongWay, f.rightWay);
}
return 0;
}

关于ios - 初始化后对 NSString 有 EXC_BAD_ACCESS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43966921/

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