问题标签 [dealloc]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
3456 浏览

objective-c - 在 dealloc 中调用 self 的方法

我有一本需要在释放之前清理的对象字典。我有一种方法可以对整个字典执行此操作。在我用我的-dealloc方法发布字典之前,我想做同样的事情。但是,我不确定释放期间对象的状态。例如,在 C# 或 Java 中,我永远不会对正在完成的对象调用方法,但我不确定这是否适用于 Objective C 和释放。在释放期间调用清理方法是否可以接受self,或者我应该在我的 ? 中复制该功能-dealloc

0 投票
2 回答
1204 浏览

iphone - iPhone - UIViewController 类 dealloc 函数从未被调用

我的一个项目有问题。

我有一个“菜单” UIViewController 类,并且从不调用 dealloc 函数。大多数 UI 是在 Interface Builder 中添加的,并且没有 IBOutlet。

如果不调用 dealloc,如何释放内存?


我模拟了一个内存警告,现在调用了 dealloc 函数。

这是我的代码示例:

那么,当我在第二个屏幕中并模拟内存警告时,第一类的 dealloc 是否应该触发?

无论如何,在我的应用程序中没有调用 dealloc :(。

0 投票
1 回答
569 浏览

ios - UITableViewDelegate dealloc 方法在应用程序仍在运行时被调用

我有一个处理表的委托方法的类。我已经使用了 IB 并将一个 UITableViewDelegate 拖到了 NIB 中,该 UITableViewDelegate 已更改为我的班级。我还在 NIB 中包含了一个 UITableView 对象,我在其中将委托和数据源连接到我的 TableViewDelegate 类。

我的类从 Internet 获取其表数据,因此我在视图设计时调用了一次委托方法并返回计数 0,因为我的数据尚未到达。当我完成获取所有数据时,我会执行 [myTable reloadData] 并且我的委托方法会再次被调用。问题是我调用了 numberOfRowsInSection,现在我返回行数,但从未调用 cellForRowAtIndexPath 而是获取 EXC_BAD_ACCESS。在启用堆栈历史和僵尸后,我发现正在调用该类的 dealloc。

dealloc restTable 类 - 在 dealloc 方法中使用 NSLOG 生成。

2011-02-27 00:33:59.979 PesquisaMapa[3526:207] * -[restTable tableView:cellForRowAtIndexPath:]: message sent to deallocated instance 0x5624190 因为我的对象最初是在 IB 中创建的,而我的 IBOutlet 是在 main 中声明的类头文件并且仅在应用程序完成时才被释放,我真的不明白为什么这个类的实例被释放。我的堆栈如下:

(gdb) info malloc-history 0x5624190 Alloc: Block address: 0x05624190 length: 160 Stack - pthread: 0xa0a5f540 number of frames: 34 0: 0x9876f103 in malloc_zone_calloc 1: 0x9876f05a in calloc 2: 0x110ad0f in _internal_class_createInstanceFromZone 3: 0x110d87d in class_createInstance 4: 0xedaff8在 +[NSObject(NSObject) allocWithZone:] 5: 0xedadfa 在 +[NSObject(NSObject) alloc] 6: 0x4c1205 在 -[UIClassSwapper initWithCoder:] 7: 0x5a79e4 在 UINibDecoderDecodeObjectForValue 8: 0x5a8693 在 -[UINibDecoder decodeObjectForKey:] 9: 0x4c0f43在 -[UIRuntimeConnection initWithCoder:] 10: 0x5a79e4 在 UINibDecoderDecodeObjectForValue 11: 0x5a72dc 在 UINibDecoderDecodeObjectForValue 12: 0x5a8693 在 -[UINibDecoder decodeObjectForKey:] 13: 0x4c0200 在 -[UINib instantiateWithOwner:options:] 14:0x4c2081 in -[NSBundle(UISBundleAdditions) loadNibNamed:owner:options:] 15: 0x37aa94 in -[UIViewController _loadViewFromNibNamed:bundle:] 16: 0x378709 in -[UIViewController loadView] 17: 0x3785e3 in -[UIViewController view] 18: 0x22fe in - [PesquisaMapaAppDelegate application:didFinishLaunchingWithOptions:] at /Users/pcasqueiro/Documents/PesquisaMapa/Classes/PesquisaMapaAppDelegate.m:24 19: 0x2cb1fa in -[UIApplication _callInitializationDelegatesForURL:payload:suspended:] 20: 0x2cd55e in -[UIApplication _runWithURL:payload: :statusBarStyle:statusBarHidden:] 21: 0x2d7db2 in -[UIApplication handleEvent:withNewEvent:] 22: 0x2d0202 in -[UIApplication sendEvent:] 23: 0x2d5732 in _UIApplicationHandleEvent 24: 0x18eca36 in PurpleEventCallback 25: 0xf98064 inoptions:] 15: 0x37aa94 in -[UIViewController _loadViewFromNibNamed:bundle:] 16: 0x378709 in -[UIViewController loadView] 17: 0x3785e3 in -[UIViewController view] 18: 0x22fe in -[PesquisaMapaAppDelegate application:didFinishLaunchingWithOptions:] at /Users/pcasqueiro /Documents/PesquisaMapa/Classes/PesquisaMapaAppDelegate.m:24 19: 0x2cb1fa in -[UIApplication _callInitializationDelegatesForURL:payload:suspended:] 20: 0x2cd55e in -[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:] 21: 0x2d7db2 in -[ UIApplication handleEvent:withNewEvent:] 22: 0x2d0202 in -[UIApplication sendEvent:] 23: 0x2d5732 in _UIApplicationHandleEvent 24: 0x18eca36 in PurpleEventCallback 25: 0xf98064 inoptions:] 15: 0x37aa94 in -[UIViewController _loadViewFromNibNamed:bundle:] 16: 0x378709 in -[UIViewController loadView] 17: 0x3785e3 in -[UIViewController view] 18: 0x22fe in -[PesquisaMapaAppDelegate application:didFinishLaunchingWithOptions:] at /Users/pcasqueiro /Documents/PesquisaMapa/Classes/PesquisaMapaAppDelegate.m:24 19: 0x2cb1fa in -[UIApplication _callInitializationDelegatesForURL:payload:suspended:] 20: 0x2cd55e in -[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:] 21: 0x2d7db2 in -[ UIApplication handleEvent:withNewEvent:] 22: 0x2d0202 in -[UIApplication sendEvent:] 23: 0x2d5732 in _UIApplicationHandleEvent 24: 0x18eca36 in PurpleEventCallback 25: 0xf98064 in0x378709 in -[UIViewController loadView] 17: 0x3785e3 in -[UIViewController view] 18: 0x22fe in -[PesquisaMapaAppDelegate application:didFinishLaunchingWithOptions:] at /Users/pcasqueiro/Documents/PesquisaMapa/Classes/PesquisaMapaAppDelegate.m:24 19: 0x2cb1fa [UIApplication _callInitializationDelegatesForURL:payload:suspended:] 20: 0x2cd55e in -[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:] 21: 0x2d7db2 in -[UIApplication handleEvent:withNewEvent:] 22: 0x2d0202 in -[UIApplication sendEvent:] 23 :_UIApplicationHandleEvent 中的 0x2d5732 24:PurpleEventCallback 中的 0x18eca36 25:0xf980640x378709 in -[UIViewController loadView] 17: 0x3785e3 in -[UIViewController view] 18: 0x22fe in -[PesquisaMapaAppDelegate application:didFinishLaunchingWithOptions:] at /Users/pcasqueiro/Documents/PesquisaMapa/Classes/PesquisaMapaAppDelegate.m:24 19: 0x2cb1fa [UIApplication _callInitializationDelegatesForURL:payload:suspended:] 20: 0x2cd55e in -[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:] 21: 0x2d7db2 in -[UIApplication handleEvent:withNewEvent:] 22: 0x2d0202 in -[UIApplication sendEvent:] 23 :_UIApplicationHandleEvent 中的 0x2d5732 24:PurpleEventCallback 中的 0x18eca36 25:0xf98064] 在 /Users/pcasqueiro/Documents/PesquisaMapa/Classes/PesquisaMapaAppDelegate.m:24 19: 0x2cb1fa 在 -[UIApplication _callInitializationDelegatesForURL:payload:suspended:] 20: 0x2cd55e 在 -[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:] 21: 0x2d7db2 in -[UIApplication handleEvent:withNewEvent:] 22: 0x2d0202 in -[UIApplication sendEvent:] 23: 0x2d5732 in _UIApplicationHandleEvent 24: 0x18eca36 in PurpleEventCallback 25: 0xf98064 in] 在 /Users/pcasqueiro/Documents/PesquisaMapa/Classes/PesquisaMapaAppDelegate.m:24 19: 0x2cb1fa 在 -[UIApplication _callInitializationDelegatesForURL:payload:suspended:] 20: 0x2cd55e 在 -[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:] 21: 0x2d7db2 in -[UIApplication handleEvent:withNewEvent:] 22: 0x2d0202 in -[UIApplication sendEvent:] 23: 0x2d5732 in _UIApplicationHandleEvent 24: 0x18eca36 in PurpleEventCallback 25: 0xf98064 in_UIApplicationHandleEvent 24 中的 0x2d5732:PurpleEventCallback 中的 0x18eca36 25:0xf98064_UIApplicationHandleEvent 24 中的 0x2d5732:PurpleEventCallback 中的 0x18eca36 25:0xf98064CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION 26: 0xef86f7 in __CFRunLoopDoSource1 27: 0xef5983 in __CFRunLoopRun 28: 0xef5240 in CFRunLoopRunSpecific 29: 0xef5161 in CFRunLoopRunInMode 30: 0x2ccfa8 in -[UIApplication _run] 31: 0x2d942e in UIApplicationMain 32: 0x228c in main at /Users/pcasqueiro/Documents/PesquisaMapa/ main.m:14 33: 0x221d 开始

看起来我的主类的 didFinishLaunchingWithOptions 正在进行一些清理工作。

关于我做错了什么的任何想法?

谢谢,电脑

0 投票
1 回答
4481 浏览

iphone - 何时在 AppDelegate 中调用 (void)dealloc?

我知道实例变量是在dealloc(如下所示)中释放的,但是它究竟是什么时候调用的呢?所有实例变量是否在应用程序关闭时释放,或者是否有一种可接受的方式在它们变得不需要时单独释放它们?

0 投票
3 回答
179 浏览

ios - [self.labelIBOutlet release] 与 [labelIBOutlet release] 的使用

为了成为 iPhone SDK 上的优秀内存公民,我一直在玩一些内存。

但是,我仍然很难理解"self.something"和 just "something"之间的区别。

据我了解,“self.something”的意思是向班级要求“某事”,但我的想法有问题。让我们看看这个例子:

我已经处理过内存释放:

  1. [self.labelIBOUtlet release] -> 它崩溃了
  2. [labelIBOUtlet release] -> 它没有。

谁能解释一下是什么原因?

谢谢!

编辑:

这是我在头文件中设置的信息:

0 投票
1 回答
1542 浏览

iphone - 当superview(UIViewController)dealloc时子视图没有调用dealloc

我对 removeFromSuperview 的内存管理感到困惑。

这是我的代码:

“自我”是 UIViewController。

当“self”调用 dealloc 但 MySubView 没有调用 dealloc。

我知道 addSubView 保留计数 +1。

所以我尝试在“self” dealloc 中添加 [tMySubView removeFromSuperview]

并且调用了 MySubView dealloc...

我应该添加 [subView removeFromSuperview]; superView什么时候dealloc?

或者 superView removeFromSuperview ,它会自动调用 subView 的 removeFromSuperview...?

我想不通。:(

谢谢!

0 投票
4 回答
102 浏览

iphone - 释放视图对象

只是想知道为什么我在构建这个时会在 dealloc 中得到“baseView”未声明的错误。

}

我使用 alloc 创建了视图,我不确定为什么在尝试释放 baseView 时会出现错误。(尝试在 viewDidUnload 中将其设置为 nil 时出现相同的错误。

0 投票
5 回答
128 浏览

objective-c - 我想知道释放变量

我认为只有第三个变量必须在 dealloc 方法中释放。是对的吗?

0 投票
3 回答
2978 浏览

iphone - NavigationController initWithRootViewController dealloc

我有一些非常简单的代码,我在其中使用 UINavigationController 并添加了 rootViewController。发生一些处理后,我想弹出当前视图控制器并将其替换为另一个。这似乎工作正常,但我原来的视图控制器没有解除分配。我在它的 dealloc 中设置了一个断点,它永远不会被击中。下面是我的代码。不知道为什么会发生。只是为了测试我是否两次发布 startController 它确实消失了。

感谢任何帮助。

0 投票
2 回答
714 浏览

iphone - UIViewController 类内存问题 - presentModalViewController

我的 iPhone 应用程序有一些内存问题,我不知道发生了什么。

因此,我观察到应用程序的内存使用量在从一个 UIViewController 转到另一个时不断上升。我使用了“Allocations”工具中的“Mark Heap”工具,它表明唯一没有被释放的对象是我的 UIViewControllers。

更具体地说,我让我的两个 UIViewControllers。第一个名为 PuzzleViewController,第二个名为 Options。当应用程序启动时,会出现 PuzzleViewController。我在这里标记一个堆,设置基线,然后按下“选项”按钮,该按钮将显示选项 UIViewController。我回到第一个并再次标记一个堆。在一遍又一遍地重复这些步骤之后(比如 20 次左右 :D),我观察到在每次 Heapshot 之后我有大约 22 个对象还活着。其中两个对象是我的 UIViewControllers 的实例。

我真的不知道发生了什么。

这是我切换到选项 UIViewController 的方法:

下面是我回到 PuzzleViewController 的方法:

我的 viewDidUnload 函数被正确调用,但从未调用过 dealloc 函数。

谢谢你,安德烈