【发布时间】:2017-05-05 14:49:33
【问题描述】:
当我在Objective-C中覆盖get set时,如果这个对象在一个数组中,如果我改变了其中一个被覆盖的属性,那么数组中的所有对象都被改变了
我有一个班级,名为“Person”:
#import <Foundation/Foundation.h>
@interface Person : NSObject
@property(nonatomic,copy) NSString *Name;
@property(nonatomic,copy) NSDecimalNumber* Money;
-(instancetype)initWithName:(NSString*)name andMoney:(NSDecimalNumber*)money;
@end
在“Person.m”中,我重写了“money”属性的get/set方法:
#import "Person.h"
@implementation Person
NSDecimalNumber* _Money;
-(instancetype)initWithName:(NSString*)name andMoney:(NSDecimalNumber*)money{
self = [super init];
if(self){
_Name = name;
_Money = money;
}
return self;
}
-(NSDecimalNumber *)Money{
return _Money;
}
-(void)setMoney:(NSDecimalNumber *)Money{
_Money = Money;
}
@end
现在,我和一些人有一个数组:
NSMutableArray<Person*> *personArray = [[NSMutableArray alloc]init];
[personArray addObject:[[Person alloc]initWithName:@"11" andMoney:[NSDecimalNumber decimalNumberWithString:@"0.1"]]];
[personArray addObject:[[Person alloc]initWithName:@"22" andMoney:[NSDecimalNumber decimalNumberWithString:@"0.2"]]];
[personArray addObject:[[Person alloc]initWithName:@"33" andMoney:[NSDecimalNumber decimalNumberWithString:@"0.3"]]];
[personArray addObject:[[Person alloc]initWithName:@"44" andMoney:[NSDecimalNumber decimalNumberWithString:@"0.4"]]];
[personArray addObject:[[Person alloc]initWithName:@"55" andMoney:[NSDecimalNumber decimalNumberWithString:@"0.5"]]];
[personArray addObject:[[Person alloc]initWithName:@"66" andMoney:[NSDecimalNumber decimalNumberWithString:@"0.6"]]];
[personArray addObject:[[Person alloc]initWithName:@"77" andMoney:[NSDecimalNumber decimalNumberWithString:@"0.7"]]];
[personArray addObject:[[Person alloc]initWithName:@"88" andMoney:[NSDecimalNumber decimalNumberWithString:@"0.8"]]];
现在,我改变了一个人的钱和名字财产:
[[personArray objectAtIndex:5]setMoney:[NSDecimalNumber decimalNumberWithString:@"0.22"]];
[[personArray objectAtIndex:5]setName:@"terry"];
现在,该数组的所有 Person 的货币属性都已更改!
for (Man* man in personArray) {
NSLog(@"%@--%@",man.Name,man.Money);
}
数组中每个人的money属性值为“0.22”!!
为什么??
【问题讨论】:
-
提前致谢!对不起我的游泳池英语。
标签: objective-c arrays get set