如果我包含一些像这样的自动属性:
@property (nonatomic, readonly) NSInteger test1;
@property (nonatomic, readonly) NSInteger test2;
@property (nonatomic, readonly) NSInteger test3;
@property (nonatomic, readonly) NSInteger test4;
但是我没有为它们声明任何ivar,我可以在.m文件中@synthesis它们,如下所示:
@synthesize test1;
@synthesize test2;
@synthesize test3;
@synthesize test4;
这没问题,编译器会自动添加ivars-a sizeof(my class)显示我的类(如您所料)比没有声明和合成这些属性的情况下大16个字节。但是,如果我不合成它们并像这样实现它们:
- (NSInteger)test1
{
return 0;
}
- (NSInteger)test2
{
return 0;
}
- (NSInteger)test3
{
return 0;
}
- (NSInteger)test4
{
return 0;
}
然后我的课又回到原来的大小。这是根据myclass.m文件中的sizeof确定的,因此编译器在这个阶段知道变量是被合成的还是被实现的。
然而,其他类不知道这只是从头文件,size of(myclass)显示没有附加(自动)ivar的大小,不管它们是否被合成。这对我来说似乎完全是一团糟,sizeof可以返回一个不同的值。在子类化和使用解引用+偏移量时,编译器的行为如何正确?(
->
)子类的公共ivar上的运算符,如果它不能确定类的大小?