ios 重写get set 的奇怪问题!!!

ctg168 2017-05-05 10:26:35
我定义了一个类: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


重写了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



然后,定义一个Man类,继承自Person (代码略,什么都没干)

然后我在另外一个地方,声明一个数组,添加了8个Man到这个列表中:


NSMutableArray<Person*> *personArray = [[NSMutableArray alloc]init];

[personArray addObject:[[Man alloc]initWithName:@"11" andMoney:[NSDecimalNumber decimalNumberWithString:@"0.1"]]];
[personArray addObject:[[Man alloc]initWithName:@"22" andMoney:[NSDecimalNumber decimalNumberWithString:@"0.2"]]];
[personArray addObject:[[Man alloc]initWithName:@"33" andMoney:[NSDecimalNumber decimalNumberWithString:@"0.3"]]];
[personArray addObject:[[Man alloc]initWithName:@"44" andMoney:[NSDecimalNumber decimalNumberWithString:@"0.4"]]];
[personArray addObject:[[Woman alloc]initWithName:@"55" andMoney:[NSDecimalNumber decimalNumberWithString:@"0.5"]]];
[personArray addObject:[[Man alloc]initWithName:@"66" andMoney:[NSDecimalNumber decimalNumberWithString:@"0.6"]]];
[personArray addObject:[[Woman alloc]initWithName:@"77" andMoney:[NSDecimalNumber decimalNumberWithString:@"0.7"]]];
[personArray addObject:[[Man alloc]initWithName:@"88" andMoney:[NSDecimalNumber decimalNumberWithString:@"0.8"]]];




然后,我修改列表中第5个对象的两个属性,然后再将列表中的8个对象的两个值打印出来:


[[personArray objectAtIndex:5]setMoney:[NSDecimalNumber decimalNumberWithString:@"0.22"]];

[[personArray objectAtIndex:5]setName:@"人"];

for (Man* man in personArray) {
NSLog(@"%@--%@",man.Name,man.Money);
}



打印结果是这样的:



8个对象的money值全部变成了一样的!!!

为什么??



...全文
469 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
kebing1011 2017-05-10
  • 打赏
  • 举报
回复
一楼正解,删掉那条
不担心 2017-05-07
  • 打赏
  • 举报
回复
同意楼上的,现在新版本的xcode编译器会默认为声明的属性添加同名的,以_打头的内部变量 所以好像你直接把NSDecimalNumber* _Money;这一句删除就能正常了
编天码地 2017-05-06
  • 打赏
  • 举报
回复
因为你的_money 是全局变量啊

29,027

社区成员

发帖
与我相关
我的任务
社区描述
主要讨论与iOS相关的软件和技术
社区管理员
  • iOS
  • 大熊猫侯佩
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧