【发布时间】:2011-04-29 18:37:27
【问题描述】:
所以我一直在阅读编码最佳实践,以及使用 setter/getter 访问和更改自定义类的实例变量的重要性,而不是公开变量并直接访问它们。
但这如何转化为访问可变字典实例变量中的值?
具体来说,我有一个自定义类。该类有许多实例变量,其中一个是 NSMutableDictionary。对于“非数组”实例变量(BOOL 等),我了解如何“正确”访问它们:使用点表示法和 setter/getter 方法。
但是对于我的 NSMutableDictionary 变量,setter/getter 只是访问 整个 字典,对吗?那么,如何从我的控制器中正确设置/获取类字典内部的值?
其实这个问题甚至适用于类实现的代码:
以我方便的init方法为例:
- (id) initWithID:(int)ID
{
if (self = [super init]) {
[self initProcedure];
[myData setObject:[NSNumber numberWithInt:ID] forKey:@"ID"];
}
return self;
}
我直接访问实例变量“myData”,而不是使用 setter/getter 方法。我知道这是“允许的”,但据我所知,这不是最好的方法。但是如何使用 setter/getter 获取字典中的值?
然后,回到我们开始的地方,我如何从类实现之外(例如,从我的控制器)执行此操作?
对于我的简单类实例变量,它只是myClassInstance.aClassVariable = someValue
但是如果我想修改“myData”中的某些内容呢?
我会做类似[myclassInstance.myData setObject:... forKey:...] 的事情吗(我知道这不正确,我只是想弄清楚我的问题/困惑。
我想我可以创建从控制器中调用的自定义类方法,例如 [myclassInstance editMyDataWithObject:... forKey:...]
但这似乎很庞大,并且仍然让我们回到类本身的实现问题,以及如何正确使用 setter/getter 技术来访问字典的成员变量,而不是直接修改字典本身。
抱歉冗长,希望我的问题很清楚。谢谢!
【问题讨论】:
-
在您的问题中添加
[self initProcedure]的代码和您在头文件中编写的 myData 的 @property 行。
标签: iphone objective-c nsmutabledictionary getter-setter