iOS - Объекты выпускаются? - PullRequest
       5

iOS - Объекты выпускаются?

0 голосов
/ 15 октября 2011

У меня есть следующий фрагмент кода:

Dummy *dummy = [[Dymmy alloc] initWithDictionary:dummyData];
DummyTableItem *dummyTableItem = [DummyTableItem itemWithDummy: dummy];
[_data addObject: dummyTableItem];

Функции инициализации следующие:

+ (id) itemWithDummy: (Dummy *) dummy {
  DummyTableItem *item = [[[self alloc] init] autorelease];
  item.dummy = dummy;
  return item;
}

- (id) init {
  self = [super init];
  if( self ) {
    dummy = nil;
  }
  return self;
}

с фиктивным объявлением (неатомным, сохранение)

И Dummy:

@synthesize name=_name;

- (id) initWithDictionary: (NSDictionary *) dictionary {
  self = [super init];

  if( self != nil ) {
    if( [dictionary objectForKey:@"name"] )
  _name = [dictionary objectForKey:@"name"];
  }

  return self;
}

с именем, снова объявленным как (неатомное, сохранение)

Когда я пытаюсь получить доступ позже к dummyTableItem.dummy.name, чтобы установить его в UILabel Iполучаю сообщение "- [CFString isEqualToString:]: отправлено освобожденному экземпляру 0x5b37a10"

Я что-то не так делаю с сохраненными объектами?Что мне здесь не хватает?Также в первой части кода я должен выпустить dummyTableItem после добавления его в _data (который является NSMutableArray?)

1 Ответ

1 голос
/ 15 октября 2011

Это должно решить проблему внутри @implementation Dummy:

@synthesize name=_name;

- (id) initWithDictionary: (NSDictionary *) dictionary {
  self = [super init];
  if (self) {
    _name = [[dictionary objectForKey:@"name"] retain]; //retain it :)
  }
  return self;
}

Поскольку вы объявили name как удержание, вы должны владеть им (именно поэтому я добавил retain при его назначении). Кроме того, вам не нужно проверять if( [dictionary objectForKey:@"name"] ), потому что _name = [nil retain]; равно nil в любом случае:)

...