我对Cocoa还是个新手,对内存管理不太了解。我阅读了苹果的文档,但仍然感到困惑。我的问题是,如果我在 - (void)dowhatever
中设置变量的值,当 dowhatever
结束时,变量的内容会被删除吗?如果是这样,是否有一种方法(无需写入文件)可以用来保留变量内容?
感谢您的帮助
最佳答案
My question is if I set the value of a variable in a
- (void)dowhatever
when the void ends, …
void
是一种类型。它没有开始,也没有结束。
具体来说,它是 dowhatever
方法的返回类型。如果 dowhatever
返回一个值,则该返回值的类型将是 void
所在的位置;例如,它会显示 - (NSUInteger) doWhatever
。那里有 void
意味着该方法不返回值。
另请参阅Objective-C 2.0 Programming Language文档。
… will the contents of the variable be erased?
如果是局部变量,那么当方法返回时该变量将不再存在。
只要该变量所属的实例(对象)存在,实例变量就存在,即直到该实例被释放为止。
Objective-C 文档中还介绍了实例变量。
If so is there a method (without writing to a file) that I can use to retain the variable contents?
如果您只是需要将对象返回给调用者,请保留它并自动释放它。请参阅Memory Management Programming Guide for Cocoa了解更多信息。
如果这不是您正在做的事情,那么问题就变成了为什么您需要该对象保持事件状态。
从对象的角度思考:一个对象可能拥有某些其他对象,并且它拥有的每个对象都有一个实例变量*。只要您明确所有权并在代码中维护它们,对象的生命周期就可以发挥作用。
如果对象 A 需要另一个对象 B,那么 A 应该拥有 B。这种所有权不是排他性的;它可以共同拥有 B。但它需要至少共同拥有 B;只要 B 至少有一个所有者,它就会一直存在。
内存管理指南中也对此进行了介绍。有关对象之间关系的其他示例,您应该翻阅 Cocoa Fundamentals Guide ,特别是关于 Cocoa's design patterns 的章节,您可能想查看 sample code查看这些模式在实践中的演示。
*它还可以拥有不属于它的对象的实例变量,例如委托(delegate)。您可以为不属于您的对象拥有一个实例变量,但如果您确实拥有它,则应该为它拥有一个实例变量。
关于cocoa - 在 cocoa 中保留信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2659882/