我在 Objective-C 中遇到了一个反复出现的问题。我要么发布太多时间,要么不够。或者也许我没有保留足够的他们......
有人可以指出一个很好的参考资料,它会给我一个关于何时需要保留和释放的经验法则吗?
例如:
我记得在某处读到一些对象是预先保留的,所以我需要释放它们,但不保留它们。这些是哪些物体?
如果我分配一个对象并且只在该方法中需要它,我需要释放它吗?保留吗?
显然,如果我保留了一些东西,我需要释放它,但除此之外,我有点迷失了。
我在 Objective-C 中遇到了一个反复出现的问题。我要么发布太多时间,要么不够。或者也许我没有保留足够的他们......
有人可以指出一个很好的参考资料,它会给我一个关于何时需要保留和释放的经验法则吗?
例如:
我记得在某处读到一些对象是预先保留的,所以我需要释放它们,但不保留它们。这些是哪些物体?
如果我分配一个对象并且只在该方法中需要它,我需要释放它吗?保留吗?
显然,如果我保留了一些东西,我需要释放它,但除此之外,我有点迷失了。
规则通常非常简单。如果您通过以下方式之一获取对象:
id obj = [[MyObject alloc] init];
id obj = [myObject retain];
id obj = [myObject copy];
id obj = [myObject mutableCopy];
那么你需要在某个时候释放它——dealloc
通常在相同的方法或你的方法中。换句话说,平衡您对alloc
、retain
、copy
和mutableCopy
的调用与匹配的release
调用。
我记得在某处读到一些对象是预先保留的,所以我需要释放它们,但不保留它们。这些是哪些物体?
这种情况很少发生。被调用方法的文档应指定您负责释放返回的对象;否则,您应该假设您正在接收一个自动释放的对象。
如果我分配一个对象并且只在该方法中需要它,我需要释放它吗?保留吗?
是的,你需要释放它(但你不需要保留它)。(如果您只打算在该方法中使用它,您也可以使用返回自动释放对象的便捷方法之一。)
只有一个规范参考:Apple 的Cocoa 或 iPhone内存管理指南。