2013-09-28 11 views
8

Ich habe seit zwei Tagen mit einem seltsamen Problem gekämpft. Ich habe alle verwandten Fragen zu SO gestellt, aber keiner hat das Problem gelöst. Ich arbeite an Xcode5. Ich verwende ARC und CoreData.[CFString release]: Nachricht an freigegebene Instanz gesendet

Auf iOS7 (Simulator):

`[CFString release]: message sent to deallocated instance` 

Thread 1, Queue : com.apple.main-thread 
0 0x03c7d3ba in __kill() 
1 0x03c7c4b8 in kill$UNIX2003() 
2 0x0347a921 in ___forwarding___() 
3 0x0347a4ee in _CF_forwarding_prep_0() 
4 0x02b7b002 in -[NSConcreteAttributedString dealloc]() 
5 0x02f66692 in objc_object::sidetable_release(bool)() 
6 0x02f65e81 in objc_release() 
7 0x02f66ce7 in (anonymous namespace)::AutoreleasePoolPage::pop(void*)() 
8 0x00739bc4 in CA::Transaction::observer_callback(__CFRunLoopObserver*, unsigned long, void*)() 
9 0x0345253e in __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__() 
10 0x0345248f in __CFRunLoopDoObservers() 
11 0x034303b4 in __CFRunLoopRun() 
12 0x0342fb33 in CFRunLoopRunSpecific() 
13 0x0342f94b in CFRunLoopRunInMode() 
14 0x04bd19d7 in GSEventRunModal() 
15 0x04bd17fe in GSEventRun() 
16 0x0196794b in UIApplicationMain() 
17 0x0000262d in main 

Der Zombies Instruments Punkt auf die zweite Zeile, wo ich die Zelle Text Etikett:

cell.txtLabel.text = _reservationModule.newReservationText; 
cell.subtitleTxtLabel.text = _reservationModule.newReservationSubtitle; 

_reservationModule ist ein Core Data Einheit, die die String-Eigenschaften . Es ist im View-Controller definiert als @property (nonatomic, strong) ReservationModule *reservationModule;

die Zombie-Geschichte:

Event Type ∆ RefCt RefCt Timestamp Responsible Library Responsible Caller 
Malloc/Retain/Release (4) 01:01.114.922 CoreData _prepareResultsFromResultSet 
0 Malloc +1 1 01:01.114.922 CoreData _prepareResultsFromResultSet 
1 Retain +1 2 01:01.116.184 CoreData -[_CDSnapshot mutableCopy] 
2 Release -1 1 01:01.318.588 MyApp  -[ReservationModuleChoice2ViewController configureSubtitleImageTableViewCell:atIndexPath:] 
3 Release -1 0 01:05.004.359 CoreData -[_CDSnapshot dealloc] 
4 Zombie  -1 01:07.441.465 CoreData -[_CDSnapshot dealloc] 

Sie haben allerdings nie auf Xcode 4.6.x aufgetreten. Jede Hilfe wird sehr geschätzt!

Danke!

+0

Das hat mir für ARC geholfen: http://stackoverflow.com/a/10596942/3411787 –

Antwort

27

Die Antwort ist trivial und hat nichts mit behalten Zählern zu tun ...

Ich beaufsichtigte, dass es nicht zu nennen Variablen/Eigenschaften erlaubt ist, mit new mit ARC Start aktiviert. Dies ist offensichtlich in einer über die Ausgabe gebracht somit die Fehler zu erzeugen ...

Von Apple-Dokumentation: https://developer.apple.com/library/ios/releasenotes/objectivec/rn-transitioningtoarc/introduction/introduction.html

Damit das Zusammenspiel mit manuellem behalten-Freigabecode, ARC erlegt eine Einschränkung für Verfahren Namensgebung:

Sie können einem Accessor keinen Namen geben, der mit new beginnt. Dies wiederum bedeutet, , dass man nicht zum Beispiel einen Eigenschaftsnamen beginnt mit neuem dem erklären, es sei denn, Sie einen anderen Getter angeben

+0

Eigenschaften ja; Dies gilt nicht für lokale * Variablen *. –

+2

und kann immer noch in Swift-Code passieren :(Habe diese Antwort nur verwendet, um das Problem mit einem CoreData-Attribut namens "new_notifications_count" aufzuspüren – christophercotton

+1

OMG DANKE SO VIEL !!!! Heilige Scheiße, was für ein seltsames Problem ... –