问题标签 [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 回答
226 浏览

iphone - 应用程序批准是否需要 super dealloc

如果我不在[super dealloc]课堂上使用,我的 iPhone 应用程序会被批准吗?

在这里我调用下一个视图控制器。

}

这是dealloc

但在这种情况下,dealloc 从不调用,我必须手动释放视图,如果我手动执行,我会崩溃super dealloc

0 投票
2 回答
190 浏览

iphone - Apple 建议在“viewDidUnload”中清除对象的解释?

我会对任何可以提供更多关于以下 Apple 建议的信息的人感兴趣(在核心数据教程中找到)在“viewDidUnload”中删除对象。例如:

  • 为什么这很重要?释放一个 nil'ing 有什么不同?
  • 这是最佳做法吗/我没有这样做过,也没有看到我在我看过的一些 iPhone 示例代码中没有想到的?

代码:

0 投票
3 回答
1235 浏览

iphone - 目标 C:子类化,覆盖 dealloc

我正在创建自定义 UITableViewCell 的子类。超类有一些在 dealloc 方法中释放的属性。我在我的子类中添加了一个额外的属性,所以我确保重写 dealloc 方法并释放我的新属性。

我的问题是,既然我覆盖了dealloc方法,那么在超类dealloc方法中释放的属性是否不会被释放(我正在调用[super dealloc])?我是否需要在我的 dealloc 方法中专门释放那些?

0 投票
2 回答
315 浏览

ios - 关于iOS内存管理的问题

我有一个关于内存管理的问题。我有一个我之前在 init* 方法中分配的实例变量。在我的程序中,我保留了这个对象。在我的 dealloc 方法中,如果我将此对象设置为 nil,他会被正确地释放吗?让我举个例子。这是 Ah 类:

和他的实现:

我的问题是当 GC 将在 A 类上调用dealloc时, bvrariable会被正确释放吗?

我的猜测是否定的,因为我保留了这个对象,所以我必须调用release两次来释放那个对象。将对象设置为 nil 不会释放它们,因为我仍然向 bvrariable 对象发送消息。但有人告诉我相反。

有人可以启发我吗?

谢谢你的建议 !!

0 投票
1 回答
579 浏览

ipad - UIPopoverController 释放问题

我使用 Popover 在其中显示图像。当用户触摸一个按钮时,弹出框会出现,里面有一个幻灯片。

我像这样初始化 Popover:`

` detailViewPopover 是一个 UIPopoverController,我将它声明为我的 .h。

我像这样解雇 Popover:`

}`

当我运行我的应用程序时,它一直有效,直到我收到“-[UIPopoverController release]: message sent to deallocated instance 0x1b29b0”并且我的应用程序崩溃......我知道我释放了太多时间我的 UIPopoverController,但我不知道在哪里。我的实施好吗?

谢谢你的帮助

如果您需要更多信息,请告诉我,我将编辑帖子

0 投票
1 回答
4186 浏览

objective-c - 在 dealloc 中使用 self.property = nil 有什么问题吗?

我知道声明的属性会生成访问器方法,这在某种程度上只是语法糖。

我发现很多人self.property = nil在他们的dealloc方法中使用。

1)在苹果的内存管理文档中,p23 说:

唯一不应该使用访问器方法来设置实例变量的地方是 init 方法和 dealloc。

为什么不应该?

2) 在苹果的Objective-C 2.0中,p74

声明的属性从根本上代替了访问器方法的声明;当你合成一个属性时,编译器只创建任何不存在的访问器方法。与该 dealloc 方法没有直接交互——属性不会自动为您释放。然而,声明的属性确实提供了一种交叉检查方法实现的有用 dealloc 方法:您可以在头文件中查找所有属性声明,并确保释放未标记 assign 的对象属性,并且 assign 未释放标记的对象属性。

注意:通常在dealloc方法中,您应该release直接对象实例变量(而不是调用 set 访问器并nil作为参数传递),如下例所示:

但是,如果您正在使用现代运行时并合成实例变量,则无法直接访问实例变量,因此您必须调用访问器方法:

注释是什么意思?

我发现[property release];并且[self setProperty:nil];两者都有效。

0 投票
2 回答
376 浏览

objective-c - NSTableViewDataSource在objective-c中的dealloc

我目前正在学习objective-c,并且正在使用NSTableView 进行培训。

这是我的问题:

我已经通过 Interface Builder 将我的 tableview 链接到我的控制器,以便它有一个数据源,我已经在我的控制器中实现了 NSTableViewDataSource 协议,并且我已经实现了-(NSInteger) numberOfRowsInTableView:-(id) tableView:objectValueForTableColumn:row:方法。

我创建了一个原始业务类(“人”),并成功地将其内容显示到我的 NSTableView 中。

但是后来,我NSLog在我的 dealloc 方法中放了一些来查看内存是否被释放,似乎我的数组以及我的“人”实例永远不会被释放。

这是我在控制器中的 dealloc 代码:

在我的“人”课上

什么时候应该在应用程序生命周期中调用这些 dealloc?因为我希望他们在窗口关闭时被调用,但它没有。

希望足够清楚,

谢谢 :)

风筝。

0 投票
1 回答
526 浏览

objective-c - 是否需要在 dealloc 中将 outlets 变量设置为 nil(即使在 IOS 3.0 之后)?

在苹果的 <内存管理> 文档中谈到 Outlets 时。

它说

在您的自定义视图控制器类中,您可以实现 viewDidUnload 以调用您的访问器方法将出口设置为零。

我可以理解这一点,因为在这种情况下调用访问器方法来设置 nil 将释放对象并将指针设置为 nil 可以防止访问可能导致崩溃的无效点。

但在那之后,它说:

注意:在 3.0 之前的 iOS 上,viewDidUnload 方法不可用。相反,您应该在 setView: 中将 outlets 设置为 nil,如下例所示:

另外,由于UIViewController中dealloc实现的一个细节,dealloc中还需要设置outlet变量为nil:

1)为什么即使在dealloc中我们也需要设置nil?(我认为 dealloc 是对象生命周期的最后一步,没有其他人可以通过这个对象访问出口。)

2)iOS 3.0 或更高版本还需要设置 nil 吗?(我发现 Xcode 自动生成的代码不会将 nil 设置为出口变量,只释放它们。)

0 投票
1 回答
263 浏览

iphone - 在 dealloc 中保存对象状态不起作用

我刚才注意到,当我在我的 dealloc 方法中保存对象状态( @public floats 转换为s )时,使用NSString

保存了错误的值!?如果我在发布之前保存值,则会保存正确的值。请注意,我[super dealloc];最后调用时很小心。为什么是这样?

0 投票
3 回答
4030 浏览

objective-c - NSTimer 在 UIView 中禁用 dealloc

释放 someview 不会调用 dealloc 并且计时器会继续运行。

如果我注释掉“timer = [NSTimer schedule....”部分,将调用 dealloc。这意味着我的代码的所有其他部分都可以正常工作,而计时器是罪魁祸首。runTimer 方法是空的,这意味着它只是在搞乱我的计时器。