我会说你需要非常担心。编程的第一条规则是用户永远不会做你期望的事情。
需要考虑的事项:
- 访问器方法。使用它们。为所有属性设置属性并始终使用适当的 getter/setter 方法访问它们:
.
object.property = some_other_object; -OR-
[object setProperty:some_other_object];
和
object = some_other_object.some_property;
object = [some_other_object some_property];
抵制做以下事情的诱惑:
property = some_other_object;
[property retain];
- 您是否从 ObjectAlloc 获得输出?内存泄漏、性能和对象分配有 4 个工具。他们都没有加载吗?
- 当应用程序崩溃时你会得到什么?EXEC_BAD_ACCESS 或其他一些错误?
- 平衡的保留(分配或复制)和释放。以相同的方法使每个分配/复制与释放/自动释放保持平衡是一个好主意。如果您一直使用访问器,则很少需要手动发布。
- 自动释放通常会隐藏一个真正的问题。Autorelease 可能会掩盖一些棘手的分配问题。仔细检查您对自动释放的使用。
已编辑(根据您的故障代码添加)基于您对“程序接收信号:0”的上述回答。这表明您的内存已用完。我将首先查找您的代码执行以下操作的实例:
myObject = [[MyClass alloc] init];
[someMutableArray addObject:myObject];
当您将新对象放入数组时,您没有“释放”。如果这个数组随后被释放,对象 myObject 将成为孤儿,但无论如何都会在内存中徘徊。执行此操作的简单方法是使用 grep 查找所有“alloc”/“copy”消息。除非在极其罕见的情况下,在同一个函数中应该有成对的“release”“/autorelease”。通常情况下,以上内容应该是:
myObject = [[[MyClass alloc] init] autorelease];
[someMutableArray addObject:myObject];