Objective c a.b和a->;之间有什么区别;b在目标C中?
A.B的一个要求是A必须在使用setter或getter之前声明@synthesis 但是A->B不需要这个 我不明白哪一个更好,哪一个使用最少的内存 如果我从A.B转换到A->B,它会使用更少的内存还是相同的数量?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使用更少的内存,因为您不需要声明@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,那么它会使用更少的内存还是不改变?