Задача c как динамически создавать словари и ссылаться на них - PullRequest
0 голосов
/ 30 ноября 2011

Мне нужно динамически создавать и уничтожать словари или массивы и использовать их в качестве переменных экземпляра

, например, [псевдокод]

*. H

 nsmutableDictionary myDictn???
 nsstring arrayn ???

как создать словарь экземпляра и свойство, которое динамически создается и уничтожается? И как обращаться к нему?

*. M

 n = 0
 create container {
  myDictn alloc init
 n+1
 }



other {
myDictn addobject@"data" forKey"myKey"

}

destroy container {
myDictn release
n-1
 }

Так что намереваетсяпокажи, что я хотел бы иметь myDict1, myDict2 ... если он был создан, или уничтожить их при необходимости

большое спасибо!

Ответы [ 3 ]

2 голосов
/ 30 ноября 2011

Для динамического создания словарей и добавления в них записей вы можете сделать это -

NSMutableDictionary *dictResult = [[[NSMutableDictionary alloc] init] retain];
[dictResult setValue:result forKey:@"key"];

Здесь result может быть любым.NSString или NSArray и т. Д. Также использование retain сохраняет этот объект и вызывает утечку памяти, если она явно не освобождена.Вместо этого попробуйте сделать autorelease таким образом, чтобы ios позаботился об освобождении объекта, когда на него больше не ссылаются.Вы делаете это так -

NSMutableDictionary *dictResult = [[[NSMutableDictionary alloc] init] autorelease];

Это все, что вам нужно для динамического создания словарей.

1 голос
/ 30 ноября 2011

Я думаю, что вы спрашиваете, как динамически создавать несколько изменяемых словарей. Вы не сказали, откуда исходит схема нумерации, поэтому вам может потребоваться изменить это решение для ваших целей.

Вам нужен массив или словарь словарей.

Сделайте один NSMutableDictionary, называемый чем-то вроде dictionaryContainer. Затем, когда вы хотите создать словарь № 7, выполните

NSMutableDictionary *aDictionary = [NSMutableDictionary new];
[dictionaryContainer setObject:aDictionary forKey:[NSNumber numberWithInt:7]];

Чтобы вызвать этот словарь, сделайте

NSMutableDictionary *theSameDictionary = [dictionaryContainer objectForKey:[NSNumber numberWithInt:7]];

Вам не нужно жестко кодировать 7, вы можете получить его из любого места и передать в виде целочисленной переменной.

1 голос
/ 30 ноября 2011

Если я правильно понял ваш вопрос, это довольно просто

@interface MyClass {
  NSMutableDictionary *dict;
  NSMutableArray *arr;
}

@property (nonatomic, retain) NSMutableDictionary *dict;
@property (nonatomic, retain) NSMutableArray *arr;

@end

Файл реализации

@import "MyClass.h"

@implementation MyClass

@synthesize dict;
@synthesize arr;

- (id) init {
  self = [super init];
  if (self) {
    dict = [[NSMutableDictionary alloc] init];
    arr = [[NSMutableArray alloc] init];
  }
  return self;
}

- (void) dealloc {
  [dict release];
  [arr release];
  [super dealloc];
}

- (void) otherStuff {

  [dict setObject: @"value" forKey: @"key"];
  [arr addObject: @"item"];

}

@end

использование из другого класса:

...
MyClass *instance = [MyClass new];
[instance.dict setObject: @"value" forKey: @"key"];
NSLog(@"Array items: %@", instance.arr);
[instance release];
...
...