Мой день испортил это сообщение:
*** -[CALayer retainCount]: message sent to deallocated instance 0x656b260
Поскольку в этом случае я сам не создаю CALayer, это может быть только CALayer для UIView, который может быть чем угодно, от UIButton до UISlider.
Итак, я получил отличный ответ от Джеффа на мой вопрос о том, как отследить это в Xcode 4 .
Джефф рекомендовал нажать Command + I, чтобы запустить Profiler, а затем выбрать инструмент Zombies. Действительно, инструмент Зомби остановился на этом CALayer и бросил в меня более полезную трассировку стека.
Однако, Stack Trace не так полезен, так как он не сообщает мне , какой объект, которым действительно был Зомби. У каждого UIView есть CALayer, но дело в том, что я сам не создаю эти экземпляры CALayer. Поэтому в этом случае цель состоит в том, чтобы узнать, к какому UIView (кнопке, ползунку и т. Д.) Принадлежит CALayer.
0 libSystem.B.dylib calloc
1 libobjc.A.dylib class_createInstanceXcode4
2 CoreFoundation +[NSObject(NSObject) allocWithZone:]
3 CoreFoundation +[NSObject(NSObject) alloc]
4 UIKit -[UIView _createLayerWithFrame:]
5 UIKit UIViewCommonInitWithFrame
6 UIKit -[UIView initWithFrame:]
7 UIKit -[UIControl initWithFrame:]
8 UIKit -[UIButton initWithFrame:]
9 UIKit +[UIButton buttonWithType:]
10 TestApp +[CCButton buttonWithNormalImage:pressedImageName:] /Users/tom/Documents/testcomp/Projects/TestApp/Xcode4/Classes/CCButton.m:267
11 TestApp -[ConfigView setupCommitBlade] /Users/tom/Documents/testcomp/Projects/TestApp/Xcode4/Classes/ConfigView.m:606
12 TestApp -[ConfigView initWithRootVC:] /Users/tom/Documents/testcomp/Projects/TestApp/Xcode4/Classes/ConfigView.m:714
13 TestApp -[TestAppViewController loadConfigViewIfNeeded] /Users/tom/Documents/testcomp/Projects/TestApp/Xcode4/Classes/TestAppViewController.m:69
14 TestApp -[TestAppViewController viewDidLoad] /Users/tom/Documents/testcomp/Projects/TestApp/Xcode4/Classes/TestAppViewController.m:293
15 UIKit -[UIViewController view]
16 TestApp -[TestAppAppDelegate application:didFinishLaunchingWithOptions:] /Users/tom/Documents/testcomp/Projects/TestApp/Xcode4/Classes/TestAppAppDelegate.m:238
17 UIKit -[UIApplication _callInitializationDelegatesForURL:payload:suspended:]
18 UIKit -[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:]
19 UIKit -[UIApplication handleEvent:withNewEvent:]
20 UIKit -[UIApplication sendEvent:]
21 UIKit _UIApplicationHandleEvent
22 GraphicsServices PurpleEventCallback
23 CoreFoundation __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__
24 CoreFoundation __CFRunLoopDoSource1
25 CoreFoundation __CFRunLoopRun
26 CoreFoundation CFRunLoopRunSpecific
27 CoreFoundation CFRunLoopRunInMode
28 UIKit -[UIApplication _run]
29 UIKit UIApplicationMain
30 TestApp main /Users/tom/Documents/testcomp/Projects/TestApp/Xcode4/main.m:14
31 TestApp start
Может быть, кто-то может указать учебник или видео, которые показывают, как профилировать проблему, как это в Xcode4? Насколько я помню, Xcode 3 действительно указал , какой объект это был, но здесь я просто не вижу, где находится зло. Должно быть какое-то практическое правило, как правильно интерпретировать эту трассировку стека / или веская причина, по которой инструмент Zombies не просто указывает на строку кода, где появился зомби.