我创建了一个带有传入参数NSString *的设计器初始值设定项 在我的班上,我有属性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。总是一样的。我做错了什么?
答案 0 :(得分:1)
作业不是你的问题。问题出在其他地方。虽然属性声明和初始化不遵循建议的模式,但它们不会导致您显示的代码崩溃。
例如,以下运行正常。您应该将@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;
}