[CFString release]: message sent to deallocated in

2019-02-16 23:20发布

问题:

I've been struggling with a strange problem for two days now. I went through every related question on SO but none solved the issue. I'm working on Xcode5. I'm using ARC and CoreData.

On 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

The Zombies Instruments point to the second line where I set the cell's text labels:

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

_reservationModule is a Core Data entity featuring the string properties. It's defined in the view controller as @property (nonatomic, strong) ReservationModule *reservationModule;

The Zombie history:

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]

They've never occurred on Xcode 4.6.x though. Any help is highly appreciated!

Thanks!

回答1:

The answer is trivial and hasn't anything to do with retain counters...

I oversaw that it isn't allowed to name variables/properties starting with new with ARC enabled. This obviously resulted in an over release thus generating the error...

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

To allow interoperation with manual retain-release code, ARC imposes a constraint on method naming:

You cannot give an accessor a name that begins with new. This in turn means that you can’t, for example, declare a property whose name begins with new unless you specify a different getter