gpt4 book ai didi

ios - Objective-c (ios) 中的基本内存管理

转载 作者:行者123 更新时间:2023-12-01 17:41:59 26 4
gpt4 key购买 nike

我对 Objective-C 和 iOS 开发很陌生,我目前正在尝试掌握如何进行内存管理。顺便说一句,我在非 ARC 中的应用程序。

除了 belove 行之外,没有在代码中的任何地方(不是 .h 或任何东西)声明这个对象。当我使用完它时,我是否需要以任何方式释放/释放这个对象以清除它的空间,还是自动完成?

NSMutableURLRequest *restRequest = [[NSMutableURLRequest alloc] init];

这也一样。不确定这是否是同一个问题,但在这里我在使用之前不使用 alloc 和 init 这两个词。这有什么区别吗?
NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]];

在这种情况下,我在 .h 文件中定义对象并保留它。这是否意味着除非我释放/释放它,否则变量将始终在内存中(当初始化一次时)?我想如果是这样的话,那是我在 View 卸载时应该在 View 中做的事情吗?
@interface Storeage : NSObject {
NSString *deviceToken;
}
@property (nonatomic, retain) NSString *deviceToken;

在 .m 文件中,我将像在第一种或第二种情况下一样分配和使用这个对象(似乎没有任何区别)。

如果这个问题很愚蠢,请耐心等待。我习惯于使用 GC 进行低级 Java 编程。

最佳答案

Do I need to release/dealloc this object in any way to clear the space for it when I am done using it, or is this done automatically?



由于您没有使用 ARC,您需要手动向其发送 release消息以处置其所有权。 (好建议:不要考虑“释放内存”。引用计数意味着你增加和减少引用计数,你拥有和停止拥有对象,在失去所有引用后释放对象是自动完成的。换句话说, release 并不一定意味着释放。)

The same goes for this one. Not sure if this is the same question, but here I don't use the words alloc & init before using it. Does that make any difference?



确实如此。您只拥有使用 alloc 创建的对象, new , copy , mutableCopy或引用使用 retain .你在这里一个都不做,所以你也不必担心发布它。 (从技术上讲,它将返回一个自动释放的实例,运行循环会处理它。)

In the .m-file I will alloc and use this object like in the first or second case (does not seems to make any difference).



区分实例变量和属性。 属性设置方法,如果声明为 retainstrong , 将保留(增加引用计数)您的对象。但这仅在您使用访问器方法时才成立,而不是在您直接访问实例变量时。如果你这样写:
variable = [[SomeObject alloc] init];

然后您需要像处理任何其他(本地)变量一样释放它:
[variable release];

如果使用访问器方法来设置它:
self.variable = [[[SomeObject alloc] init] autorelease];

那么你必须使用 autorelease创建它时(否则它的引用计数将为 2 并且您将泄漏内存)。

在这两种情况下,您也可以使用 self.variable = nil;放弃所有权。 这仅适用于属性。

随着 ARC 的引入,所有这一切都发生了根本性的变化,出于三个原因,我在此不作解释:
  • 无论如何,我都不是 ARC 专家;
  • 我想鼓励你在尝试 ARC 之前完美地学习 MRC(你似乎有意);
  • 这不是问题。
  • 关于ios - Objective-c (ios) 中的基本内存管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16224091/

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