Q: How do you store and access elements in the Storage class?
A: Although Storage's instance variables permit you to access the data directly, this approach is discouraged. Instead, use the Storage object's methods (such as addElement: and elementAt:) to store and access the elements.
Following is a code snippet that creates an empty Storage object, adds new elements to it, and then references them. The type-specific code is #defined for clarity. Note that the elements need to be added and referenced as pointers.
#import <objc/Storage.h>
@interface SomeObject:Object
@end
@implementation SomeObject
#if 1
#define TYPE char *
#define PRINT(var1, var2) printf("first = %s second = %s\n", var1, var2);
#define VAL1 ("hello")
#define VAL2 ("world")
#else
#define TYPE int
#define PRINT(var1, var2) printf("first = %d second = %d\n", var1, var2);
#define VAL1 (-5)
#define VAL2 (32)
#endif
- appDidInit:sender
{
Storage *store;
TYPE a = VAL1;
TYPE b = VAL2;
TYPE *a1;
TYPE *b1;
store = [[Storage alloc] initCount:0 elementSize:sizeof(TYPE)
description:@encode(TYPE)];
[store addElement:(void *)&a];
[store addElement:(void *)&b];
PRINT(a, b);
a1 = (TYPE *) [store elementAt:0];
b1 = (TYPE *) [store elementAt:1];
PRINT(*a1, *b1);
return self;
}
QA504
Valid for 2.0, 3.0