0

我有两个类,一个处理数据库连接的类和一个实体类。db 类有一个名为 GetEntityByID:(int)entity_id 的实例方法。此方法执行一个简单的选择语句,并使用 init 方法创建一个 Entity 类实例。

这很好用,但是调用 GetEntityByID 的人必须记住释放它。由于 GetEntityByID 不是“init”方法,这似乎不对。在这种情况下,我如何最好地处理内存管理?

4

2 回答 2

5

如果实例没有被保留,您可以在类上调用autorelease您的方法来自动释放实例。GetEntityID

由于类的实例化是在您的数据库连接类的方法中完成的,因此返回实例的对象并不“拥有”它 - 您的数据库连接类。至此,按照惯例,您需要对实例进行内存管理:

如果您使用名称以“alloc”或“new”开头或包含“copy”(例如,alloc、newObject 或 mutableCopy)的方法创建对象,或者向其发送保留消息,则您将获得对象的所有权。您有责任放弃使用 release 或 autorelease 拥有的对象的所有权。任何其他时间您收到一个对象,您都不能释放它。

如果发送该GetEntityID方法的对象想要保留该对象,例如,如果要将其用作实例变量,则可以保留返回的对象,防止它在当前事件结束时被释放。如果它只是在本地使用,并且不需要在当前事件之后保留,那么该类不需要做任何事情;它将在当前事件结束时由自动释放池释放。

本文解释了有关自动释放池的更多信息。

于 2009-06-20T19:01:58.393 回答
0

要自动释放返回的对象,GetEntityID请执行以下操作GetEntityID

...  // cool stuff in GetEntityID
return [[entity_id retain] autorelease];
}

看看这篇非常好的文章,更详细地解释了 Objective-C 内存管理。

于 2009-06-20T19:50:34.770 回答