查看标题。更具体地说,我试图返回一个对象的mutableCopy,但它返回的retainCount为1,我担心它会泄漏。在Objective-C中返回一个对象时,retainCount应该是什么?
0
A
回答
0
mutableCopy总是递增对象的retainCount。所以,如果你使用retain,copy或者mutableCopy你必须在dealloc方法中释放。
如果要返回该对象,你必须使用自动释放,这样的:
[[[NSString alloc] initWithString:@"Test"] autorelease];
的自动释放池,将释放你的对象,也没有必要在dealloc方法来释放。
希望能帮到你。
+1
我明白,但如果我返回所说的对象呢? – skylerl 2010-03-13 23:51:38
+0
对不起,想念你的问题中的回报部分。 – reinaldoluckman 2010-03-14 00:36:02
10
你的方法应该遵循标准的内存管理程序。如果你的方法返回一个对象,但不包含“alloc”,“new”,“copy”,“create”或“retain”等字,那么该对象应该被自动释放。
如果它包含其中一个单词,那么它应该返回一个+1保留计数。
例如:
//return an autoreleased object, since there's no copy, create, retain, alloc, or new
- (id) doSomethingWithFoo:(id)foo {
id fooCopy = [foo copy];
[fooCopy doTheNeedful];
return [fooCopy autorelease];
}
//return a +1 object, since there's a copy in the name
- (id) copySomethingWithFoo:(id)foo {
id fooCopy = [foo copy];
[fooCopy doTheNeedful];
return fooCopy;
}
相关问题
- 1. 什么是ObjectiveC中的retainCount?
- 2. 为什么retainCount返回2
- 3. 为什么retainCount返回-1
- 4. 为什么我的JS应该返回一个对象返回undefined?
- 5. 什么时候应该在Javascript中创建一个新对象?
- 6. 什么时候应该在dealloc中释放一个对象?
- 7. 为什么line()不总是返回一个线对象?为什么它有时似乎返回一个双?
- 8. 为什么我的SqlCommand应该是一个int时返回一个字符串?
- 9. 如果我的java函数的返回值是仅在运行时已知的两个可能对象之一,那么应该返回什么对象?
- 10. 什么应该dynamicType在Swift中返回?
- 11. 在Python中从网站返回的响应对象是什么?
- 12. 返回类型应该是什么?
- 13. 流星发布或订阅返回一个对象数组时,它应该只返回一个对象
- 14. modelstate无效时应该返回什么?
- 15. 为什么不是这个查询返回一个对象?
- 16. 为什么这个脚本返回“'空'不是一个对象'?
- 17. 什么时候应该让函数返回一个promise?
- 18. 为什么 - [NSObject retainCount]有时会返回意外的值?
- 19. 我应该如何从函数中返回一个对象?
- 20. 为什么要在oop中返回一个对象的克隆?
- 21. 如果找不到要返回的对象,应该从方法返回什么?
- 22. 为什么MarshalByRefObject.InitializeLifetimeService返回一个对象而不是ILease?
- 23. .responseXML()返回什么对象?
- 24. LocateRegistry.createRegistry()返回什么对象?
- 25. python不返回None对象,它应该返回时TDirectoryFile根对象
- 26. 为什么EntityFramework只返回一列时才返回整个对象?
- 27. 应该返回什么,对onOptionsItemSelected()是true或false?
- 28. 为什么Mockito的模拟返回0时应该返回null?
- 29. Python:为什么isinstance返回False,何时应该返回True?
- 30. 什么应该是一个React组件,什么应该只是一个HTML?
保留计数应该是什么是应该的;具体的数字并不有趣。戴夫德隆的答案是正确的。 – bbum 2010-03-14 01:14:51