[CFString release]:发送到解除分配实例的消息

Fra*_*sco 8 core-data cfstring nszombie ios

我两天来一直在努力解决一个奇怪的问题.我在SO上经历了所有相关问题但没有一个解决了这个问题.我正在研究Xcode5.我正在使用ARC和CoreData.

在iOS7(模拟器)上:

`[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
Run Code Online (Sandbox Code Playgroud)

Zombies Instruments指向我设置单元格文本标签的第二行:

cell.txtLabel.text = _reservationModule.newReservationText;
cell.subtitleTxtLabel.text = _reservationModule.newReservationSubtitle;
Run Code Online (Sandbox Code Playgroud)

_reservationModule是一个以字符串属性为特色的核心数据实体.它在视图控制器中定义为@property (nonatomic, strong) ReservationModule *reservationModule;

僵尸历史:

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]
Run Code Online (Sandbox Code Playgroud)

但它们从未出现在Xcode 4.6.x上.任何帮助都非常感谢!

谢谢!

Fra*_*sco 28

答案是微不足道的,与保留计数器没有任何关系......

我监督说,不允许在new启用ARC的情况下命名变量/属性.这显然导致过度释放,从而产生错误......

来自Apple文档:https://developer.apple.com/library/ios/releasenotes/objectivec/rn-transitioningtoarc/introduction/introduction.html

为了允许与手动保留释放代码进行互操作,ARC对方法命名施加了约束:

您不能为访问者提供以new开头的名称.这反过来意味着你不能,例如,声明一个名称以new开头的属性,除非你指定一个不同的getter

  • 并且仍然可以在swift代码中发生:(只是使用此答案来帮助跟踪名为"new_notifications_count"的CoreData属性的问题 (2认同)