Objective c 具有综合属性的setter中形式参数的命名

Objective c 具有综合属性的setter中形式参数的命名,objective-c,naming-conventions,Objective C,Naming Conventions,我已经学习和使用Objective-C有一段时间了(它也是我的第一种OOP语言),最后我想知道如何正确命名合成属性 让我们以以下场景为例: 我有一个名为someVariable的属性 @property (nonatomic, retain) NSString *someVariable; 并将其合成 @synthesize someVariable; 按照惯例,自定义设置器是什么样子的 1) 我会这样说 -(void)setSomeVariable:(NSString *)someVar

我已经学习和使用Objective-C有一段时间了(它也是我的第一种OOP语言),最后我想知道如何正确命名合成属性

让我们以以下场景为例:

我有一个名为
someVariable
的属性

@property (nonatomic, retain) NSString *someVariable;
并将其合成

@synthesize someVariable;
按照惯例,自定义设置器是什么样子的


1)

我会这样说

-(void)setSomeVariable:(NSString *)someVar{

    //input parameter MAY sound/look foreign due to the difference to the property
    someVariable = someVar;

}

2)(非法)

但是为了可读性和方便起见,我想将形式参数命名为属性。在Java中更像这样:

-(void)setSomeVariable:(NSString *)someVariable{

    //obviously illegal because this would call the setter over and over again
    self.someVariable = someVariable; 

}

3)(非常规)

根据我过去读到的,这个

@synthesize someVariable = _someVariable; 
据说是非传统的,不应该被使用


那么,我的结论是正确的吗?到目前为止,我一直在这样做,这是创建自定义setter的唯一方法

3)并不是非常规的,如果您不提供
@synthesis
语句,编译器就是这样做的

这意味着,在没有
@synthesis
语句和ivar声明的情况下,您有一个名为
\u someVariable
的隐式ivar,自定义setter通常有一个名为
someVariable
的参数

-(void)setSomeVariable:(NSString *)someVariable {
    _someVariable = someVariable;
}
还请注意,为特定属性提供自定义setter和getter方法表明Xcode编译器不提供隐式ivar(此处
\u someVariable
)。对于
readonly
属性,如果只提供getter方法,则相同

为现代版本的编译器提供了大量有关Objective-C构造的详细信息

编辑

正如H2CO3在他的回答中所建议的,我编写的代码假设您正在使用ARC。如果您使用的是MRC,那么setter方法应该是:

-(void)setSomeVariable:(NSString *)someVariable {
    [someVariable retain];
    [_someVariable release];
    _someVariable = someVariable;
}

是的,我应该做我的研究。非常感谢。嘿,没有问题是一个错误的问题:)@mate你是怎么否决我的答案的?如果是,请解释原因。而且,这是错误的,或者说是不安全的。在所有类型的Objective-C代码中,对象都被假定为由setter保留,而该代码没有这样做。(还有,这里不仅仅是一个假设:属性声明说
(retain)
)我真的没有否决你的答案。我也很惊讶。你的答案比我的更完整!我只是不赞成误导性的答案…@matehat可能还有人认为MRC不存在(这是我一直收到的投诉…不管怎样。我建议你还是提一下我提到的内存管理问题——可能会节省几小时的调试时间。)