写Setter 方法用于完成 @property (nonatomic, retain) NSString *name,写一个 setter 方法用于完成 @property (nonatomic, copy) NSString *name
参考答案:
在 Objective-C 中,使用 @property
关键字定义属性时,编译器会自动生成对应的 getter 和 setter 方法。但如果你需要手动实现这些方法,特别是针对 retain
和 copy
属性,下面是如何实现的示例。
对于 @property (nonatomic, retain) NSString *name;
,setter 方法应该使用 retain
语义,确保对象被保留。
- (void)setName:(NSString *)name {
if (_name != name) {
[_name release];
_name = [name retain];
}
}
但是请注意,在现代的 Objective-C(使用 ARC,即自动引用计数)中,你不需要手动调用 retain
和 release
。在 ARC 环境下,你只需简单地赋值即可,编译器会自动处理内存管理。
对于 @property (nonatomic, copy) NSString *name;
,setter 方法应该使用 copy
语义,以确保传递给属性的字符串是新的、独立的副本,而不是原始字符串的引用。这有助于防止由于外部修改原始字符串而导致的问题。
- (void)setName:(NSString *)name {
if (_name != name) {
[_name release];
_name = [name copy];
}
}
同样,在 ARC 环境下,你只需简单地赋值即可,编译器会自动创建字符串的副本。
不过,在现代的 Objective-C 开发中,通常使用自动合成的属性(由编译器自动生成 getter 和 setter),而不是手动编写这些方法。你可以简单地在类定义中声明属性,编译器会为你处理其余的工作。