gpt4 book ai didi

ios - 使用指定的初始化时,属性的Objective-C复制属性不起作用

转载 作者:行者123 更新时间:2023-12-01 18:47:06 26 4
gpt4 key购买 nike

这是预期的行为吗?

例如,使用这样声明的类:

@interface XYZPerson : NSObject

@property (nonatomic, copy) NSString *firstName;
@property (nonatomic, copy) NSString *lastName;

+ (instancetype)personWithFirstName:(NSString *)firstName lastName:(NSString *)lastName birthday:(NSDate *)birthday;

@end

@implementation XYZPerson
+ (instancetype)personWithFirstName:(NSString *)firstName lastName:(NSString *)lastName birthday:(NSDate *)birthday {
return [[self alloc] initWithFirstName:firstName lastName:lastName birthday:birthday];
}

- (instancetype)initWithFirstName:(NSString *)firstName lastName:(NSString *)lastName birthday:(NSDate *)birthday {
self = [super init];
if (self) {
_firstName = firstName;
_lastName = lastName;
_birthday = birthday;
}
return self;
}

- (instancetype)init {
return [self initWithFirstName:@"John" lastName:@"Doe" birthday:[NSDate date]];
}

getter 不会复制以下内容:
NSMutableString *name1 = [NSMutableString stringWithString:@"First"];
NSDate *birthday1 = [NSDate dateWithYear:1900 month:10 day:10];

XYZPerson *person = [XYZPerson personWithFirstName:name1 lastName:@"Last" birthday:birthday1];

NSMutableString *n1 = (NSMutableString *)person.firstName;
[n1 appendString:@"ttt"];

NSLog(@"%@", person.firstName); // Prints Firstttt

但是,这会引发异常(这是预期的行为,因为以下代码在不可变 NSString 上调用 appendString:
XYZPerson *person = [XYZPerson new];
person.firstName = name1;
person.lastName = @"Last";
person.birthday = birthday1;

NSMutableString *n1 = (NSMutableString *)person.firstName;
[n1 appendString:@"ttt"];

NSLog(@"%@", person.firstName);

我的代码中是否缺少某些内容?

更新
此外,如果这是预期的行为,而不是异常,我们是否应该对应该复制的属性使用工厂方法?

最佳答案

您正在分配支持变量。这不使用访问器方法,并且不会发生复制。

并且将 NSString* 分配给 NSMutableString* 不会使其可变。如果编译器没有为此发出警告,请更改 Xcode 中的设置。

关于ios - 使用指定的初始化时,属性的Objective-C复制属性不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34719318/

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