1

假设我有

@interface A : NSObject
@property (nonatomic, strong) NSMutableArray *array;
@end

稍后在另一个类B中,我想访问该数组,以检查其中有多少项目。B我可以在( ais an instance of )中做两件事之一A

选项1

[a.array count]

选项 2

[[a array] count];

哪个选项是最好的方法?[a array]当用作 getter 方法时,选项 2 是访问数组的正确方法吗?

4

3 回答 3

3

如果您合成了数组,两者都是相同的。在第一个中,您只需调用属性,在第二个中,您正在调用由 @synthesize 操作生成的 getter 方法。

并确保第二个选项是正确的方法,因为@synthesize 有两种方法

1- 与属性名称相同的 getter 2- 以属性名称开头的 setter,首字母大写,如 setArray。

于 2012-05-28T15:04:32.990 回答
1

正如萨德所说,如果你合成了阵列,两者之间没有区别。但是,我建议括号语法在所有方法调用中保持一致,因为所有其他 Objective-C 方法(除了 C 中的函数)都使用括号语法来调用。

于 2012-05-28T17:50:55.700 回答
0

在您决定重命名生成的 getter/setter 方法之前没有区别,并且消息可能会变得无效。

对于公共实例变量,您可以跳过访问器方法(属性和方法样式)并使用结构取消引用运算符:

@interface A : NSObject
{
   NSMutableArray *array;
}

@property (nonatomic, strong) NSMutableArray *array;
@end

班A.m

[self->array count];

B类.m

[a->array count];

这样做,您放弃了使用具有不同属性的属性(在两种访问样式中)进行的操作和内存管理优化的便利性,请参阅更多

作为 NSString 属性的示例

@property (readwrite, copy) NSString *sVar;

生成的 setter 如下所示:

-(void)setSVar:(NSString*)inSVar
{
        if (self->sVar != inSVar)
        {
                [self->sVar release];
                self->sVar = [inSVar copy];
        }
}
于 2012-05-28T15:58:37.987 回答