考虑以下:
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个字节?
在这种情况下,矩阵应该嵌入在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,具体取决于您的目标体系结构.