Objective c a.b和a->;之间有什么区别;b在目标C中?

Objective c a.b和a->;之间有什么区别;b在目标C中?,objective-c,Objective C,A.B的一个要求是A必须在使用setter或getter之前声明@synthesis 但是A->B不需要这个 我不明白哪一个更好,哪一个使用最少的内存 如果我从A.B转换到A->B,它会使用更少的内存还是相同的数量? A->B使用更少的内存,因为您不需要声明@synthesis,对吗?因为您的问题也被标记为C,A->B和A.B访问结构(A)的相同元素(B),但在第一种情况下,A是指向结构的指针,而在第二种情况下,A是结构本身 a.b => member b of object a a-&g

A.B的一个要求是A必须在使用setter或getter之前声明@synthesis 但是A->B不需要这个

我不明白哪一个更好,哪一个使用最少的内存

如果我从A.B转换到A->B,它会使用更少的内存还是相同的数量?
A->B使用更少的内存,因为您不需要声明@synthesis,对吗?

因为您的问题也被标记为C,A->B和A.B访问结构(A)的相同元素(B),但在第一种情况下,A是指向结构的指针,而在第二种情况下,A是结构本身

a.b => member b of object a
a->b => member b of object pointed by a
在对象
的第一个内存中,在堆栈上分配一个
。在第二种情况下,
a
指向的对象的内存是从空闲存储中提供的


注:由于你的问题标注了C++,

这不是一个比另一个更好的情况。他们做不同的事情

如果您声明一个属性(即
@property
@synthesis
@dynamic
),编译器将使用标准的Objective-C命名约定为您生成getter和setter

a->b实际上是一个C结构。它可以用在Objective-C中,但不太常见。也许最简单的解释方法是使用以下代码:

typedef struct { int a; int b; } someType;

someType a;
someType* b;

// assign values 
a.a = 1;
a.b = 2;

// also assign values (assume memory has been allocated)
b->a = 1;
b->b = 2;

(这是来自内存。可能有输入错误。)

如果a是结构,请使用a.b

如果a是指向结构的指针,请使用a->b

如果a是对象指针,b是ivar,请使用a->b


如果a是一个对象指针,b是一个属性,则使用a.b

如果
a
是一个Objective-C对象,则
a.b=C
与编写
[a setB:c]相同

setB:
在本例中,当您指定
@property(…)typeB时,它是自动生成的setter方法的默认名称
@synthetic b
。您可以放置相应的内存说明符,如retain、assign、copy,而不是
。 通过编写
a->b=c
可以避免使用setter方法,直接访问
b

因此,构造
a->b
生成的额外代码较少,但打破了OOP中主要的“封装”概念之一,您还应该手动处理与内存相关的工作人员


例如,如果您在
b
@属性
中指定了
retain
,那么构造
a.b=c
的行为几乎与
a->b=[c retain]

@peoro:Objective-c与c相关(而c++)。将标记留在那里是有意义的。@BoltClock:这个问题包含一些特定于objective-c的东西(比如
@synthesis
)。此外,任何C问题都与目标C和C++有关(略少);让我们别名这三个标签……<代码> > <代码> >和<代码> >代码> > C和C++,我认为这些标签应该被删除。当前C和C++的答案对于目标C是不正确的。对于<代码> A.B.<代码>,不需要@合成或@属性。你能告诉我,如果我从A.B转换成-> B,那么它会使用更少的内存还是不改变?