Objective c 目标C:更改实现文件中的属性

Objective c 目标C:更改实现文件中的属性,objective-c,Objective C,我想将上面的people属性设置为仅在.m文件中可变(NSMutableDictionary)。因此,当我变异人字典时,这些变化会反映在接口NSDictionary 我试过做一个像下面这样的iVar,但没有成功 PeopleClass.h @interface PeopleClass : NSObject @property (strong, nonatomic) NSDictionary *people; @end 实现这一点的最佳方法是什么?要实现您想要的功能,您需要提供自己的实例变量以

我想将上面的
people
属性设置为仅在.m文件中可变(
NSMutableDictionary
)。因此,当我变异
字典时,这些变化会反映在接口
NSDictionary

我试过做一个像下面这样的iVar,但没有成功

PeopleClass.h

@interface PeopleClass : NSObject
@property (strong, nonatomic) NSDictionary *people;
@end

实现这一点的最佳方法是什么?

要实现您想要的功能,您需要提供自己的实例变量以及自己的setter和getter方法。以下是基本设置:

人民阶级

PeopleClass.m

@interface PeopleClass ()
{
    NSMutableDictionary *people;   
}
人民阶级

@interface PeopleClass : NSObject
@property (strong, nonatomic) NSDictionary *people;
@end
在getter方法中使用
copy
是可选的。这取决于您希望如何处理结果


将属性更改为
copy
而不是
strong
,可能也是有意义的,因为setter和getter的实现真正尊重
copy
,而不仅仅是
strong

来完成您需要提供自己的实例变量和自己的setter和getter方法的任务。以下是基本设置:

人民阶级

PeopleClass.m

@interface PeopleClass ()
{
    NSMutableDictionary *people;   
}
人民阶级

@interface PeopleClass : NSObject
@property (strong, nonatomic) NSDictionary *people;
@end
在getter方法中使用
copy
是可选的。这取决于您希望如何处理结果


将属性更改为
copy
而不是
strong
也可能是有意义的,因为setter和getter的实现真正尊重
copy
,而不仅仅是
strong

您确实不想将可变字典作为不可变的引用返回给客户端。首先,如果您以后进行了变异,那么使用该引用的代码很可能会在假定它不能变异的情况下编写时中断。其次,上述代码的一些客户端可能有一个bug,该bug会使内容发生变异,从而导致代码中断(这发生在Cocoa中)

相反:

@implementation PeopleClass {
    NSMutableDictionary *_people;
}

- (NSDictionary *)people {
    return [_people copy]; // or just return _people
}

- (void)setPeople:(NSDictionary *)people {
    _people = [people mutableCopy];
}
在您的.m中:

@interface PeopleClass : NSObject
@property (readonly, strong, nonatomic) NSDictionary *people;
@end

如果复制确实是一个性能问题(由检测和分析确定),那么您可以保留副本,并在备份存储发生变化时使其失效/替换。

您确实不希望将可变字典作为不可变的引用返回给客户端。首先,如果您以后进行了变异,那么使用该引用的代码很可能会在假定它不能变异的情况下编写时中断。其次,上述代码的一些客户端可能有一个bug,该bug会使内容发生变异,从而导致代码中断(这发生在Cocoa中)

相反:

@implementation PeopleClass {
    NSMutableDictionary *_people;
}

- (NSDictionary *)people {
    return [_people copy]; // or just return _people
}

- (void)setPeople:(NSDictionary *)people {
    _people = [people mutableCopy];
}
在您的.m中:

@interface PeopleClass : NSObject
@property (readonly, strong, nonatomic) NSDictionary *people;
@end
如果复制确实是一个性能问题(由检测和分析确定),那么您可以保留该复制,并在备份存储发生变化时使其失效/替换