在这种情况下如何处理内存管理?

0 memory-management objective-c autorelease

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

这样可以正常工作,但是调用GetEntityByID的人必须记得释放它.由于GetEntityByID不是"init"方法,因此这似乎不正确.在这种情况下,如何最好地处理内存管理?

Ale*_*ski 5

如果不以其他方式保留,您可以调用类autorelease中的GetEntityID方法来自动释放实例.

由于类的实例化是在DB连接类的方法中完成的,因此返回实例的对象并不"拥有"它 - 您的数据库连接类.因此,根据惯例,您需要内存管理实例:

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

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

本文将详细介绍自动释放池.