我还是Cocoa的新手,对内存管理知之甚少。我读了Apple的文档,但我仍然感到困惑。我的问题是,当- (void)dowhatever
结束时,如果我在dowhatever
中设置变量的值,是否会删除变量的内容?如果有的话,我可以使用一种方法(不写入文件)来保留变量内容吗?
感谢您的帮助
答案 0 :(得分:2)
我的问题是,当void结束时,我是否在
- (void)dowhatever
中设置变量的值,...
void
是一种类型。它没有开始也没有结束。
具体来说,它是dowhatever
方法的返回类型。如果dowhatever
返回了一个值,那么该返回值的类型就是void
的值;例如,它会说- (NSUInteger) doWhatever
。拥有void
意味着该方法不会返回值。
另请参阅Objective-C 2.0 Programming Language文档。
...是否会删除变量的内容?
如果它是局部变量,那么当方法返回时,变量将不复存在。
只要变量是exists的一部分的实例(对象)存在,实例变量就存在 - 也就是说,直到实例被解除分配。
实例变量也包含在Objective-C文档中。
如果有,我可以使用一种方法(不写入文件)来保留变量内容?
如果您只需要将对象返回给调用者,请保留它并自动释放它。有关详细信息,请参阅Memory Management Programming Guide for Cocoa。
如果那不是你正在做的事情,那么问题就变成为什么你需要让对象保持活力。
根据对象思考:对象可能拥有某些其他对象,并且对于它拥有的每个对象都有一个实例变量*。只要您拥有自己的所有权并在代码中维护它们,对象的生命周期就会起作用。
如果对象A需要另一个对象B,那么A应该拥有B.这种所有权不是排他性的;它可以共同拥有B.但它需要至少共同拥有B;只要拥有至少一个所有者,B就会保持活力。
内存管理指南中也包含了这一点。对于对象之间关系的其他示例,您应该翻阅Cocoa Fundamentals Guide,尤其是Cocoa's design patterns上的章节,您可能希望查看sample code以查看实践中演示的那些模式。 / p>
*它也可以包含它不拥有的对象的实例变量,例如委托。你可以拥有一个你不拥有的对象的实例变量,但如果你拥有它,你应该有一个实例变量。