我会说你需要非常关心。编程的第一条规则是用户永远不会做你期望的事情。
需要考虑的事情:
- 存取方法。使用它们。设置 属性所有属性和 始终与 适当的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或其他一些错误?
- 平衡保留(无论是alloc还是 副本)和版本。用 相同的方法来保持每个分配/副本均衡 的释放/自动释放是一个好主意 。如果您使用您的 访问器所有的时间,需要 做手动发布很少。
- Autorelease经常会隐藏真正的 问题。有可能Autorelease 可以掩盖一些棘手的分配 问题。仔细检查您的使用 autorelease。
编辑(根据您的故障代码添加) 根据您的上述“编程接收信号:0”的回答。这表示您的内存不足。我会通过寻找你的代码确实是这样情况下启动:
myObject = [[MyClass alloc] init];
[someMutableArray addObject:myObject];
,你没有“释放”,当你把新的对象到数组。如果这个数组被释放,那么对象myObject将成为一个孤儿,但无论如何都会在内存中存在。这样做的简单方法是grep所有的“alloc”/“copy”消息。除极少情况外,在同一功能中应该有一对“释放”/“自动释放”。通常情况下,上述应该是:
myObject = [[[MyClass alloc] init] autorelease];
[someMutableArray addObject:myObject];
它如何崩溃? –
“程序接收信号:0” –