Жизнь объекта после смерти (сохранить количество = 0) - PullRequest
1 голос
/ 22 января 2010

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

Предполагается, activeItem :

@property (nonatomic, retain) ItemView *activeItem;

И у нас есть это условное касание. Округлено:

if (CGRectContainsPoint(dropRect, touchLocation)) {
    ItemView *replacementItem = [[ItemView alloc] initWithFrame:frame];

    [newItems replaceObjectAtIndex:[newItems indexOfObject:activeItem] withObject:replacementItem];

    [self addSubview:replacementItem];
    [controller.view.subView addItem:activeItem];
    [replacementItem goCenter];
    [replacementItem release];
}

Единственное, что сохраняет activeItem , - это NSArray, newItems. Должен ли я сохранить его перед вызовом replaceObjectAtIndex, а затем отпустить, когда я отпущу replacementItem? Другой способ?

Кажется, работает нормально, но разве EXC_BAD_ACCESS?!?

это только вопрос времени

1 Ответ

4 голосов
/ 22 января 2010

Я предполагаю, что где-то у вас есть activeItem = something вместо self.activeItem = something

Разница в том, что точечная версия "self" проходит через метод синтезированного мутатора (сеттера), который выполняет сохранение перед назначениемк ивару.Это предполагает, что у вас есть синтезированный метод или метод, созданный вручную, который делает то, о чем заявляет свойство.

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

(В этом случае похоже, что вы используете activeItemбольше похоже на индекс во что-то, а не на «контейнер», предназначенный для «владения» объектом, и это делает его сценарием для слабых ссылок, ЕСЛИ это то, для чего вы собираетесь.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...