我想在运行时动态创建实例变量,我想将这些变量添加到一个类别中。实例变量的数量可能会根据我用于定义它们的配置/属性文件而更改。
任何想法??
答案 0 :(得分:5)
使用Associative References - 这很棘手,但这是专门针对您的用例而发明的机制。
以下是上述链接中的示例:首先,您使用objc_setAssociatedObject
定义引用并将其添加到对象中;然后,您可以通过调用objc_getAssociatedObject
来恢复该值。
static char overviewKey;
NSArray *array = [[NSArray alloc] initWithObjects:@ "One", @"Two", @"Three", nil];
NSString *overview = [[NSString alloc] initWithFormat:@"%@", @"First three numbers"];
objc_setAssociatedObject (
array,
&overviewKey,
overview,
OBJC_ASSOCIATION_RETAIN
);
[overview release];
NSString *associatedObject = (NSString *) objc_getAssociatedObject (array, &overviewKey);
NSLog(@"associatedObject: %@", associatedObject);
objc_setAssociatedObject (
array,
&overviewKey,
nil,
OBJC_ASSOCIATION_ASSIGN
);
[array release];
答案 1 :(得分:1)
我倾向于使用NSMutableDictionary
(请参阅NSMutableDictionary Class Reference)。因此,你会有一个ivar:
NSMutableDictionary *dictionary;
然后你要初始化它:
dictionary = [NSMutableDictionary dictionary];
然后,您可以在代码中动态保存值,例如:
dictionary[@"name"] = @"Rob";
dictionary[@"age"] = @29;
// etc.
或者,如果您正在从文件中读取并且不知道密钥的名称将是什么,您可以通过编程方式执行此操作,例如:
NSString *key = ... // your app will read the name of the field from the text file
id value = ... // your app will read the value of the field from the text file
dictionary[key] = value; // this saves that value for that key in the dictionary
如果您使用的是旧版Xcode(4.5之前),则语法为:
[dictionary setObject:value forKey:key];
答案 2 :(得分:0)
取决于你想要做什么,问题是模糊的,但如果你想拥有几个对象或几个整数等,那么数组就是最佳选择。假设您有一个包含100个数字列表的plist。你可以做一些像这样的事情:
NSArray * array = [NSArray arrayWithContentsOfFile:filePath];
// filePath is the path to the plist file with all of the numbers stored in it as an array
这会给你一个NSNumbers数组,如果你想这样,你就可以把它变成一个刚出的数组;
int intArray [[array count]];
for (int i = 0; i < [array count]; i++) {
intArray[i] = [((NSNumber *)[array objectAtIndex:i]) intValue];
}
每当你想从某个位置得到一个整数时,假设你要看第5个整数,你会这样做:
int myNewInt = intArray[4];
// intArray[0] is the first position so [4] would be the fifth
只需研究使用plist来提取数据,通过解析plist就可以很容易地在代码中创建自定义对象或变量数组。