将属性与局部变量作为方法参数传递

时间:2015-09-09 18:50:30

标签: ios objective-c

e.g。 Person类有一个属性@property (strong, nonatomic) NSString *name;和两个方法:初始化方法- (instancetype)initWithName:(NSString *)name;和另一个方法- (void)doSomethingWithName:(NSString *)name;如下:

- (instancetype)initWithName:(NSString *)name
{
    self = [super init];
    if (self) {
        self.name = name;
        [self doSomethingWithName:name];
    }
    return self;
}

- (void)doSomethingWithName:(NSString *)name
{
    NSLog(@"My name is: %@", name)
}

虽然在这种情况下我们将局部变量name- initWithName:传递到- doSomethingWithName:,但我们可以通过将self.name传递给{{1}来实现相同的结果}。实际上,我们甚至可以重写- doSomethingWithName:方法:

- doSomethingWithName:

哪种方法被认为是最佳做法?为什么?

1 个答案:

答案 0 :(得分:0)

这两种方法做了不同的事情。

表格

- (void)doSomethingWithName:(NSString *)name

更像是一个全球功能。它需要一个参数并对其做一些事情。

不带参数的表单是实例方法。您要求对象使用名称执行某些操作。

两者都不比另一方好。这是一个需要/意图的问题。

这就像问厨师“什么更好,用搅拌器或抹刀?”两者都不比另一个好。它们是适合不同任务的不同工具。