创建Objective-C对象的最佳编程实践是什么?
我正在学习Objective-C,作为课程之一,我们创建一个类Employee及其超类Person,以及一个资产类,其实例由Employee拥有。为了测试这些类及其实例函数,我编写了以下代码创建Objective-C对象的最佳编程实践是什么?,objective-c,parameters,messages,nested,Objective C,Parameters,Messages,Nested,我正在学习Objective-C,作为课程之一,我们创建一个类Employee及其超类Person,以及一个资产类,其实例由Employee拥有。为了测试这些类及其实例函数,我编写了以下代码 int main(int argc, const char *argv[]){ @autoreleasepool{ NSMutableArray *employees = [[NSMutableArray alloc] init]; for (int i = 0; i < 10; i
int main(int argc, const char *argv[]){
@autoreleasepool{
NSMutableArray *employees = [[NSMutableArray alloc] init];
for (int i = 0; i < 10; i++){
Employee *person = [[Employee alloc]init];
[person setWeightInKilos:90 + i];
[person setHeightInMeters:1.8 - i/10.00];
[person setEmployeeID:i];
[employees addObject:person];
}
.../*code continues from here, to assign [person]
's at random indexes in *employees, instances of the Asset class */
}
}
谢谢。您的Person类有几个属性,包括weightInKilos、heightInMeters和employeeID
当然,您可以单独设置每个属性。为了方便起见,您可以提供特殊的帮助器方法,使在一次调用中设置多个属性变得更容易。这是完全可选的。你是否选择添加这些额外的方法完全是个人品味和风格的问题
此类辅助方法的一个考虑因素是在何处划线。哪些属性应该是此类方法的参数?如果以后添加另一个属性,会发生什么情况?是否更新helper方法以获取另一个参数,然后更新所有调用这些方法的代码
在许多情况下,最好只单独设置每个选项。我用来决定是否创建这样一个助手方法的一条准则是,对象是否需要将某一组属性设置为有效。如果存在这种情况,那么我通常创建一个特殊的init方法,该方法将所需的属性作为参数。然后可以单独设置所有可选对象。您忽略了显示如何定义Employee对象。体重、身高和身份是否作为财产持有?如果是这样,它们通常会自动生成访问器方法,因此您不需要编写这些例程。物业有很好的便利性 至于为什么你会使用一种方法而不是另一种,最令人信服的原因是个人风格的问题。要考虑的事情——如果你选择改变一个人的储存重量,将会发生什么;您是否有只设置该参数的方法,或者您需要设置关于它们的所有内容
通常会有一个初始值设定项来接收要初始化的对象的信息,但是像这样的东西-iditwithweight:和height:andId:和somethingelse:和morething:比我把它展开的时间要快得多。要解决此问题,NSDictionary类可能会很有帮助,其中dictionary包含您选择包含的所有字段,并且方法变为-idinitUsingDictionary:NSDictionary*dictionary;。这样做的一个好处是,您可以轻松地将字段设置为可选字段,并使用单个方法签名进行处理。基本上这里没有任何对错,objective-c语法和编码约定允许您使用多个参数的长消息 这里有几个选项: 在init上设置这些参数,例如initWithId:height:weight: 为它们中的每一个创建属性 为它们中的每一个创建单独的函数 创建setProperties函数 要决定这一点,你首先应该问自己: 这三个三胞胎的身高、体重、身份证在逻辑上是属于一起的吗? 只设置其中一个有意义吗? 该对象缺少这些值有意义吗? 是否需要将设置这些参数作为一项原子操作? 对象的不变性重要吗?
大多数时候,我选择使我的对象不可变,这意味着我为它们创建一个只读属性,并通过init函数设置它们 如果需要在创建对象后立即设置该信息,请使初始值设定项将其作为参数。
main.m:
....
for (int i = 0; i < 10; i++){
Employee *person = [[Employee alloc]init];
[person setWeightInKilos:90 + i withAHeightOf:1.8 - i/10.00 andId:i];
[employees addObject:person];
}
....