NSString и UITouch какво става по света?

Имам грешка с NSString. В един от моите .m файлове имам член, наречен "conversions" от тип 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: stackoverflow.com/questions/6578/ - person DarkDust; 09.08.2010
comment
Никога не съм извиквал освобождаване или автоматично освобождаване на реализациите, освен за извикване на освобождаване в метода dealloc. Не съм запознат с retain. Когато декларирам низа в .h файла, го правя свойство с неатомично свойство retain. Това не е ли достатъчно? - person CodeGuy; 09.08.2010
comment
След това трябва да използвате присвояване на свойства: self.conversions = ... - person tc.; 09.08.2010