gpt4 book ai didi

objective-c - 我应该在每个方法中保留一个对象指针参数吗?

转载 作者:可可西里 更新时间:2023-11-01 06:22:32 25 4
gpt4 key购买 nike

我正在尝试掌握保留/释放的窍门。我知道它们是匹配的。但是我不知道什么时候必须保留引用。

-(void)sampleMethod:(RandomClass *) obj {
[obj retain];
// Do stuff to object...
[obj release];
}

是否有必要保留(并因此释放)obj?

我担心 obj 会消失。这是否意味着您必须(如果)尽快在函数中保留引用参数?函数调用和函数的第一条指令之间的时间间隔如何?

谢谢!

最佳答案

简答;使用 ARC。

Joe 的回答或多或少是正确的。直到它不是。

一般情况下,不需要保留参数或其他方法的返回值。然而,生成的代码只能通过巧合和约定工作,而不是通过算法分析。

考虑:

NSString *foo = [aMutableArray objectAtIndex: 5];
[aMutableArray removeObjectAtindex: 5];
[someTextField setTextValue: foo];

砰!

您的代码刚刚崩溃。也许(如果 foo 碰巧 是常量字符串或碰巧 被其他东西保留或碰巧,它不会崩溃 已在其他地方保留/自动释放)。

从技术上讲,这应该是:

NSString *foo = [aMutableArray objectAtIndex: 5];
[foo retain];
[aMutableArray removeObjectAtindex: 5];
[someTextField setTextValue: foo];
[foo release];

也就是说,foo 在进入作用域时应该保留,在作用域不再使用时释放。或者您可以 [[foo retain] autorelease];,但自动释放压力可能是个问题(通常不是,但也可能是)。

ARC 进行此类分析,并确保在必要时如上所示保留 foo

关于objective-c - 我应该在每个方法中保留一个对象指针参数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7209674/

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