保留可可的信息?

时间:2010-04-17 20:15:13

标签: cocoa memory-management retain

我还是Cocoa的新手,对内存管理知之甚少。我读了Apple的文档,但我仍然感到困惑。我的问题是,当- (void)dowhatever结束时,如果我在dowhatever中设置变量的值,是否会删除变量的内容?如果有的话,我可以使用一种方法(不写入文件)来保留变量内容吗?

感谢您的帮助

1 个答案:

答案 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>

*它也可以包含它不拥有的对象的实例变量,例如委托。你可以拥有一个你不拥有的对象的实例变量,但如果你拥有它,你应该有一个实例变量。