如果我包含一些像这样的自动属性:
@property (nonatomic, readonly) NSInteger test1;
@property (nonatomic, readonly) NSInteger test2;
@property (nonatomic, readonly) NSInteger test3;
@property (nonatomic, readonly) NSInteger test4;
Run Code Online (Sandbox Code Playgroud)
但我不为它们声明任何iVars,我可以在.m文件中@synthesize它们,如下所示:
@synthesize test1;
@synthesize test2;
@synthesize test3;
@synthesize test4;
Run Code Online (Sandbox Code Playgroud)
这没有问题,编译器会自动添加iVars - sizeof(MyClass)显示我的类(正如您所料)比未声明和合成这些属性大16个字节.但是,如果我没有合成它们,我会像这样实现它们:
- (NSInteger)test1
{
return 0;
}
- (NSInteger)test2
{
return 0;
}
- (NSInteger)test3
{
return 0;
}
- (NSInteger)test4
{
return 0;
}
Run Code Online (Sandbox Code Playgroud)
然后我的班级恢复到原来的大小.这是根据MyClass的.m文件中的sizeof确定的 - 因此编译器在此阶段知道变量是合成还是实现.
但是,其他类只是从头文件中不知道这一点,sizeof(MyClass)显示的大小没有附加(自动)iVars,无论它们是否合成.这似乎完全搞砸了我,sizeof可以返回不同的值.->如果不能确定类的大小,那么当子类化时以及在子类的公共iVars上使用dereference + offset()运算符时,编译器如何正确运行?
| 归档时间: |
|
| 查看次数: |
470 次 |
| 最近记录: |