当前位置:  开发笔记 > 编程语言 > 正文

在Objective-C中初始化为类变量时,在哪种内存上分配C结构

如何解决《在Objective-C中初始化为类变量时,在哪种内存上分配C结构》经验,为你挑选了1个好方法。

考虑以下:

typedef struct
{
  float m00, m01, m02, m03;
  float m10, m11, m12, m13;
  float m20, m21, m22, m23;
  float m30, m31, m32, m33;
} Matrix;

@interface TestClass : NSObject
{
  Matrix matrix;
}

- (TestClass *) init;
@end

@implementation TestClass
- (TestClass *) init
{
  self = [super init];
  matrix = (Matrix) {1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f};
  return self;
}
@end

如果"矩阵"变量不再相关(或者整个对象被释放时),如何确保正确释放分配给struct的64个字节?



1> 小智..:

在这种情况下,矩阵应该嵌入在ObjectiveC编译器为TestClass实例生成的结构中.它的生命周期绑定到它所属的TestClass实例,就像int或float成员一样.

如果检查指针,可以轻松测试.

TestClass* testAddress = [[TestClass alloc] init];
Matrix* matrixAddress = &(testAddress->matrix);

int rawTest = (int) testAddress;
int rawMatrix = (int) matrixAddress;
int memberOffset = rawMatrix - rawTest;

printf("%i", memberOffset);

我这里没有编译器,但我想它只会嘟嘟一些关于邪恶的类型转换的警告并反正生成代码.输出应该是常量,例如4或8,具体取决于您的目标体系结构.

推荐阅读
yzh148448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有