NSString и UITouch, что в мире происходит?

У меня ошибка с NSString. В одном из моих файлов .m у меня есть член с именем «преобразования» типа NSString, и в методе этого класса строка обрабатывается и добавляется к ней и т. д. Хорошо, когда я пытаюсь зарегистрировать эту строку другим методом, который позже вызывается, по какой-то причине строка печатается как объект UITouch. В частности, я пытаюсь записать строку следующим образом

NSLog(@"%@", conversions);

и в моей консоли он печатает

<UITouch 0x131700> phase: Ended tap count: 1 window: <UIWindow: 0x136470; frame = (0 0: 320 480) opaque = NO.....(and more property type stuff)

Почему мой NSString превратился в то, что выглядит как объект UITouch? Что здесь происходит?


person CodeGuy    schedule 09.08.2010    source источник
comment
Пожалуйста, покажите вывод, используя NSLog(@[%@].conversions); Возможно, вывод, который вы видите, представляет собой текст NSString.   -  person ennuikiller    schedule 09.08.2010
comment
Вывод такой же, за исключением скобок в начале и в конце: [UITouch 0x131700› фаза....]   -  person CodeGuy    schedule 09.08.2010
comment
у вас проблема с чрезмерным выпуском, как говорится в ответе ниже... Память, на которую указывает NSString, высвобождается и повторно используется (на этот раз каким-то объектом UITouch)   -  person Daniel    schedule 09.08.2010


Ответы (1)


Вероятная причина таких проблем заключается в том, что «конверсии» были выпущены слишком рано, поэтому они были освобождены, и вы все еще удерживали ссылку на эту ячейку памяти. Затем в этом месте был выделен другой объект.

Чтобы отладить это, установите NSZombieEnabled. Он не освобождает объекты, а заменяет их «зомби». См., например, следующую ссылку:

http://www.tomwhitson.co.uk/blog/2009/04/debugging-with-nszombiesenabled/

person DarkDust    schedule 09.08.2010
comment
Кажется, это проблема. Почему он был выпущен слишком рано и как этого избежать? - person CodeGuy; 09.08.2010
comment
Ну, очевидно, вы либо слишком часто называли [выпуск конверсий] или [автоматический выпуск конверсий], либо слишком мало называли [сохранение конверсий] :-) Без контекста я не могу сказать. Но взгляните на это: блог .mikeweller.com/2009/07/ - person DarkDust; 09.08.2010
comment
Еще одна хорошая ссылка здесь, в Stack Overflow: цель c"> stackoverflow.com/questions/6578/ - person DarkDust; 09.08.2010
comment
Я никогда не вызывал релиз или авторелиз конверсий, за исключением вызова релиза в методе Dealloc. Я не знаком с сохранением. При объявлении строки в файле .h я делаю ее свойством с неатомарным свойством сохранения. Разве этого недостаточно? - person CodeGuy; 09.08.2010
comment
Затем вам нужно использовать назначение свойства: self.conversions = ... - person tc.; 09.08.2010