当谈到从相同类中的不同方法访问对象时,根据我的理解,这是两种方法。鉴于我 DO 想要保存一个指向此对象的属性指针,这是更好的方法吗?我一直在考虑这个问题,并想知道是否存在偏好共识。
#1:
NSArray *array = ... // Get array from somewhere
self.myArray = array;
[self doSomethingToMyArray];
此方法不带参数,并通过self
通过自己的属性访问数组- (void)doSomethingToMyArray
{
// Do stuff with/to the array via self.myArray
[self.myArray ...];
}
vs #2:
NSArray *array = ... // Get array from somewhere
self.myArray = array;
[self doSomething:array];
此方法接受一个数组并通过自己的方法参数
访问该数组- (void)doSomething:(NSArray *)array
{
// Do stuff with/to the array via method parameter "array"
[array ...];
}
答案 0 :(得分:4)
我认为这主要取决于doSomethingToMyArray
做什么以及谁叫它。
相当明显的评论:
除了这些问题之外,还有很多我们只是喜欢这些东西才能发挥作用 - 注意到你正在做 数组,而不是 数组,在这种情况下,如果类别提示有意义,则更倾向于NSArray
(或self.myArray = [self processedFormOf:array]
。
所以,嗯,我认为没有一个明确的答案。
答案 1 :(得分:3)
这取决于你想做什么,只需阅读它:
doSomething:array
我认为上面的方法采用ANY数组并执行操作,而:
doSomethingToMyArray
使用此方法,您将描述对实例的数组执行某些操作的意图。在这个方法中(假设您遵循Apple良好的编码实践并将您的属性合成为_myArray),您可以选择:
[self.myArray message]
或者最好
[_myArray message]
答案 2 :(得分:1)
你的第二个选择有点傻。如果你在一个实例中存储一个指针,那么你可以在以后(在那个实例中)使用它,而不需要在调用方法时传递它。
这还取决于您是否使用ARC(如果这是一个新项目,请使用ARC)。在非ARC项目中,self.myArray = foo;
将执行与myArray = foo;
完全不同的事情(self.
语法调用属性,在许多情况下,该属性将正确保留您已分配的内容) 。在ARC项目中,它们通常具有相同的行为,并且错误的空间较小。
就我个人而言,在我的ARC项目中,我不使用类中的self.
语法,因为它只是为了同样的效果而进行额外输入。这与@property
的新用法非常吻合,您不再需要编写@synthesize
块,而Objective-C会自动为您生成一个ivar,其名称为您的属性以下划线为前缀,即_myPropertyName
。当你从类外部访问代码(穿过封装边界)时,这会使视觉非常清晰,其中事物看起来像foo.bar = baz;
而不是类内部,只有_bar = baz;
。
答案 3 :(得分:0)
恕我直言,显然,函数调用会产生额外的开销。
除非您对getter进行了自定义,否则属性实际上是一个小函数调用。我还假设编译器可能为这些访问器设置了自己的优化,以便您可以以最小的开销访问它们,尽管我没有任何来源引用它。