gpt4 book ai didi

iphone - 键盘关闭时内存泄漏

转载 作者:行者123 更新时间:2023-12-03 18:44:01 24 4
gpt4 key购买 nike

我有一个显示 UITextField 的 View Controller 。这里我带了键盘

- (void)viewDidAppear:(BOOL)animated
{
[wordTextField becomeFirstResponder];
}

然后我有一个按钮可以关闭键盘而不关闭 Controller 本身:

- (void)cancel:(id)sender
{
if([wordTextField isFirstResponder])
{
[wordTextField resignFirstResponder];
}

}

此后,仪器将向我显示泄漏

#   Category    Event Type  Timestamp   RefCt   Address Size    Responsible Library Responsible Caller
0 Malloc 128 Bytes Malloc 00:11.239 1 0x3b82550 128 UIKit UIKeyboardInputManagerClassForInputMode

在堆栈中的某个位置[wordTextField resignFirstResponder]提到了。

即使我自己不带键盘并让用户触发它,我仍然有泄漏。在这种情况下,堆栈中没有提到我的代码中的任何内容。

最佳答案

Leaks Instrument 向您显示在应用程序的正常过程中不会释放的内存(因为没有任何对其的引用)。这本身没什么大不了的,当应用程序退出时它会被释放。许多框架代码将分配并保留这些非常小的内存块。我不知道它们是否是错误或对于应用程序的运行至关重要。不管怎样,我们必须承认它们是完全正常的。

泄漏会将这些内存块识别为“泄漏”,这听起来很糟糕,但这并不是仪器帮助您识别的真正“泄漏”。

“真正的”泄漏存在于可以多次运行的代码中,并且分配了一些永远不会释放的内存,因此随着时间的推移,将消耗越来越多的内存,直到所有内存都被使用并且您的应用程序将崩溃。

因此,如果您的应用程序无论使用多长时间或如何使用,它都会在 Apple 框架中“泄漏”128 字节,您通常不必担心。

但是,如果您有一个应用程序,每次单击按钮时,它都会分配一个永远不会释放的新字符串 - 无论该字符串有多少字节 - 如果用户按下按钮足够多次,这将消耗所有内容应用程序可用的内存并最终使其崩溃。这是您需要提防的泄漏类型。

泄漏工具实际上无法区分这两种类型,但您需要能够区分。例如,您可能需要一种单例对象,它只有一个实例,并且需要在应用程序的整个生命周期中存在。您在应用程序启动时创建该对象,实际上您永远不需要释放该对象,它可以在应用程序退出时被杀死。 Leaks 会将其标记为泄漏,而与您一起工作的其他一些开发人员认为这意味着您不知道自己在做什么,他们会像 child 子一样跑向您的老板并说“他正在编写非常泄漏的代码,那就是真的很糟糕”。而你的老板,不是程序员,会认真对待他,因为这听起来确实很糟糕,而且无论如何,他从一所著名大学获得了 2.2 的计算机科学 2.2 分,所以他必须知道他在说什么。当它真的是完全合理的并且正是你想要做的时候。

因此,请使用 Leaks 工具来查找代码中可能会毁掉您的应用程序的错误。不必担心 Apple 框架中发现的每个字节“泄漏”。

关于iphone - 键盘关闭时内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3340353/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com