作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在尝试掌握保留/释放的窍门。我知道它们是匹配的。但是我不知道什么时候必须保留引用。
-(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/
这是我的jade雕像: section#entry-review-template.template(data-class='entry-review') table thead
我是一名优秀的程序员,十分优秀!