最近我完成了我的第一个 Iphone 应用程序,它运行良好....除了当我使用仪器进行紧张的会话后一段时间没有泄漏时发现泄漏,突然获得大约 1.3Kb 的价值。在堆栈跟踪中,它们都指向我在将 UIViewControler 推送到导航控制器后释放它的确切行(我将把这段代码贴得更远一点)。几次浏览 ViewControlers 并再次返回后,泄漏似乎发生了。我知道这是一个非常普遍的问题,但我希望有人能指出我正确的方向。我花了几天时间试图解决这个问题,它开始让我发疯!
我的应用程序是基于导航的应用程序,简而言之,它的工作原理如下:
从 UIViewControler 开始,当按下按钮时,它会转到另一个包含 TableView 的 UIViewControler。从这里根据填充 TableView 的数组的内容,它可以转到包含 PickerView 的 UIViewControler,然后转到最后一个 UIViewControler,或者直接转到最后一个 UIViewControler,绕过带有 PickerView 的那个。
这是堆栈跟踪显示泄漏已打开的代码:
SoundConfiger *third = [[SoundConfiger alloc] initWithNibName:@"SoundConfiger" bundle:[NSBundle mainBundle]];
[third setTitle:@"Sound Link"];
third.myData = myData;
third.selectedRow = row;
third.currentChoise = nil;
[self.navigationController pushViewController:third animated:YES];
[third release]; <---- Instruments says the leak is here on this line.
NavigationController 现在不应该负责这个 UIViewcontroler 吗?我没有在其他任何地方调用第三个保留,它只存在于这个函数中。
我有一堆来自 UIkit 和 QuartsZone 的泄漏。我有其中一些的屏幕截图,在堆栈跟踪中都指向相同的代码片段,在同一个函数中,在同一个对象中,如上所述,在跟踪中的某个点:
这是图片的链接,因为我还不能发布图片:链接不再有效
这是列表中第一个 GeneralBlock-16 的完整堆栈跟踪。粗体字(第 29 行)是上面的代码片段:
0 libSystem.B.dylib malloc
1 核心基础-[__NSArrayM insertObject:atIndex:]
2 核心基础-[__NSArrayM addObject:]
3 UIKit-[UIView(UIViewGestures) addGestureRecognizer:]
4 UIKit-[UISwitch_commonInit]
5 UIKit-[UISwitch initWithCoder:]
6 UIKit UINibDecoderDecodeObjectForValue
7 UIKit UINibDecoderDecodeObjectForValue
8 UIKit-[UINibDecoder decodeObjectForKey:]
9 UIKit-[UIView initWithCoder:]
10 UIKit UINibDecoderDecodeObjectForValue
11 UIKit-[UINibDecoder decodeObjectForKey:]
12 UIKit-[UIRuntimeConnection initWithCoder:]
13 UIKit UINibDecoderDecodeObjectForValue
14 UIKit UINibDecoderDecodeObjectForValue
15 UIKit-[UINibDecoder decodeObjectForKey:]
16 UIKit -[UINib 实例化WithOwner:选项:]
17 UIKit-[NSBundle(UISBundleAdditions) loadNibNamed:owner:options:]
18 UIKit-[UIViewController _loadViewFromNibNamed:bundle:]
19 UIKit-[UIViewController 加载视图]
20 UIKit-[UIViewController 视图]
21 UIKit-[UIViewController 内容滚动视图]
22 UIKit-[UINavigationController _computeAndApplyScrollContentInsetDeltaForViewController:]
23 UIKit-[UINavigationController_layoutViewController:]
24 UIKit-[UINavigationController_startTransition:fromViewController:toViewController:]
25 UIKit-[UINavigationController _startDeferredTransitionIfNeeded]
26 UIKit-[UINavigationController pushViewController:transition:forceImmediate:]
27 UIKit 0x6ea9b5
28 UIKit-[UINavigationController pushViewController:animated:]
29 诱杀陷阱-[SelectEventTypeviewcontroler ChooseThisOne] /Users/chriswyllie/Documents/Booby Trap/Booby Trap/Classes/SelectEventTypeviewcontroler.m:91
30 核心基础-[NSObject(NSObject) performSelector:withObject:withObject:]
31 UIKit-[UIApplication sendAction:to:from:forEvent:]
32 UIKit-[UIApplication sendAction:toTarget:fromSender:forEvent:]
33 UIKit-[UIControl sendAction:to:forEvent:]
34 UIKit-[UIControl(内部)_sendActionsForEvents:withEvent:]
35 UIKit-[UIControl touchesEnded:withEvent:]
36 UIKit-[UIWindow_sendTouchesForEvent:]
37 UIKit-[UIWindow 发送事件:]
38 UIKit-[UIApplication 发送事件:]
39 UIKit_UIApplicationHandleEvent
40 图形服务 PurpleEventCallback
41核心基础 CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION
42 核心基础 __CFRunLoopDoSource1
43 核心基础 __CFRunLoopRun
44 CoreFoundation CFRunLoopRunSpecific
45 核心基础 CFRunLoopRunInMode
46 图形服务 GSEventRunModal
47 图形服务 GSEventRun
48 UIKit-[UIApplication_run]
49 UIKit UIApplicationMain
50 诱杀装置主 /Users/chriswyllie/Documents/Booby Trap/Booby Trap/main.m:14
51 陷阱开始
提前感谢您的帮助,我希望我只是在做一些愚蠢的事情,我需要一双新的眼睛才能看到它。如果您需要更多信息,请告诉我。