假设我有
@interface A : NSObject
@property (nonatomic, strong) NSMutableArray *array;
@end
稍后在另一个类B
中,我想访问该数组,以检查其中有多少项。我可以在B
中执行以下两项操作之一(a
是A
的实例):
选项1
[a.array count]
选项2
[[a array] count];
哪种选择是最好的方法?使用[a array]
作为getter方法时,选项2是否是访问数组的正确方法?
答案 0 :(得分:3)
都是一样的。在第一个中你只需要调用属性,在第二个中你调用由@synthesize动作生成的getter方法。
确保第二个选项是正确的,因为@synthesize有两个方法
1- getter与属性名称相同 2- setter,在开头添加属性名称,首字母为captial,如setArray。
答案 1 :(得分:1)
如果您已合成阵列,两者之间没有区别,正如萨阿德所说。但是,我建议使用括号语法在所有方法调用中保持一致,因为所有其他Objective-C方法(除了C中的函数)都使用括号语法来调用。
答案 2 :(得分:0)
在您决定重命名生成的getter / setter方法并且消息可能无效之前没有区别。
对于公共实例变量,您可以跳过访问器方法(属性和方法样式)并使用结构解除引用运算符:
@interface A : NSObject
{
NSMutableArray *array;
}
@property (nonatomic, strong) NSMutableArray *array;
@end
classA.m
[self->array count];
classB.m
[a->array count];
执行此操作,您可以放弃使用具有不同属性的属性(在两种访问方式中)进行的操作和内存管理优化的便利性,请参阅more。
作为NSString属性的示例
@property (readwrite, copy) NSString *sVar;
生成的setter看起来像这样:
-(void)setSVar:(NSString*)inSVar
{
if (self->sVar != inSVar)
{
[self->sVar release];
self->sVar = [inSVar copy];
}
}